xdebug.remote_mode や xdebug.remote_autostart の設定がよくわからなかったので整理しました。
xdebug.remote_mode
req | リクエスト開始時にデバッグセッションが開始されます |
---|---|
jit | 最初にエラーが発生したときにデバッグセッションが開始されます |
jit の場合はエラーが発生しない限りデバッグセッションが開始されないため、ブレークポイントを設定していてもエラーの行以降でしか止まりません。eclipse の設定で「PHP - デバッグ」の「最初の行でブレーク」を ON にしておけば、最初にエラーが発生したところでブレークさせることが出来ます。
<?php $i = 1; // ここにブレークポイントがあっても止まらない $i = a; // Noticeエラー、この時点でデバッガに接続される $i = 2; // ここにブレークポイントがある場合は止まる
xdebug.remote_autostart
On | 常にリモードデバッグセッションが開始されます |
---|---|
Off | GET/POST/COOKIE に(CLIの場合は環境変数に)特別な値が設定されている場合にデバッグセッションが開始されます |
CLI の場合は環境変数「XDEBUG_CONFIG」を設定していればデバッグセッションが開始されます。また、この環境変数を使って XDebug の設定を指定することも出来ます。
# idekey と接続先を指定してデバッグセッションを開始 export XDEBUG_CONFIG=idekey=ECLIPSE_DBGP remote_host=192.168.0.123 php sample.php
Web の場合 GET/POST に「XDEBUG_SESSION_START=
以降のりクエストでは GET/POST に何も指定しなくても COOKIE が設定されているため自動的にデバッグセッションが開始されます。
eclipse でデバッグを開始すると、自動的に「XDEBUG_SESSION_START=ECLIPSE_DBGP」が付与されたURLが開かれます。が、私は Firefox の「easy Xdebug」拡張で COOKIE の ON/OFF を制御するようにしています。
xdebug.remote_mode=jit の場合はエラーの発生時にデバッグセッションが開始されるため、この設定は意味がありません。
(GET/POST/COOKIE や環境変数による idekey などの指定は有効ですが、設定しなくても php.ini の設定でデバッグセッションは開始されます)。
xdebug.remote_connect_back
On の場合 xdebug.remote_host は無視されて REMOTE_ADDR が接続先として使用されます。DHCPなどでデバッガ側のIPアドレスが固定では無い場合に有用です。
CLI の場合は意味ないと思います。
eclipse の「リモート・セッション受信(JIT)」の設定
off | JIT無効 |
---|---|
ローカル・ホスト | ローカルホストからの接続だけ受け入れます |
任意 | 任意のホストからの接続を受け入れます |
プロンプト | 接続を受け入れるかどうかをプロンプトで問合せます |
この設定はリモートの xdebug から eclipse に接続があったときにどのように振る舞うかの設定です。
off の場合、eclipse でデバッグを開始していて、かつ、リモートの xdebug の idekey が ECLIPSE_DBGP であれば接続を受け入れます。
off 以外の場合、eclipse でデバッグを開始していなくても常時ポートがリッスンされ、xdebug からの接続を受け入れてデバッグセッションが開始されます。このときのデバッグ構成は、メインメニューの「実行 - デバッグの構成」で設定したものは無く、設定の「PHP - デバッグ」で設定されているデフォルトの構成が使用されます。
なお、eclipse でデバッグが開始済みで、かつ、リモートの xdebug の idekey が ECLIPSE_DBGP であれば開始済みのデバッグ構成が使用されます(JIT が off の場合と同じ挙動です)。