カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

PHP(xdebug)+IntelliJでブレークポイント置いてるのに、そこで止まってくれないとき

xdebugの設定もちゃんとして、動いているっぽいのに、止まらずスルーされてしまう場合。

phpは5.6.21、xdebugは2.4.0、IntelliJは以下。

IntelliJ IDEA 2016.1.3
Build #IU-145.1617, built on June 3, 2016
JRE: 1.8.0_76-release-b198 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

まず、ブレークポイントを置いている該当のコードを実行する。

そうすると、デバッグの設定が正しければ、IntelliJのログ窓で、 Waiting for incoming connection with ide key 'FOOBAR' という表示が、 connected に変わる。

ここが変わらない場合は、 http://www.1x1.jp/blog/2014/08/how-to-setup-php-remote-debug-with-vagrant-vm.html などを見ながら設定をしなおさないといけない。

次に、php.iniファイルで、以下の設定を入れる。

xdebug.profiler_enable=1
xdebug.remote_log=/var/log/xdebug_remote.log

そして、以下を実行する。

$ sudo touch /var/log/xdebug_remote.log
$ sudo chomod 666 /var/log/xdebug_remote.log

そして、再度スクリプトを実行する。 ログに何か吐かれたら成功。

もし、ブレークポイントを置いているなら、以下のようにブレークポイント置いた行で、 breakpoint_set というログが見られるはず。

<- breakpoint_set -i 6 -t line -f file:///vagrant/workspace/some_command.php -n 37
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="6" id="187390001"></response
>

どこかに繋げないとか違うエラーが出ていたら、そこも直さないといけない。

ここまで確認できたら、ブレークポイントを置いた付近に以下のコードを埋め込む。

xdebug_break();

そうして、再度スクリプトを実行する。

ここで、僕の場合は以下のエラーがIntelliJのログに見られた。

Remote file path '/foo/bar/some_command.php' is not mapped to any file path in project

ということで、マッピングが設定されていないのが原因。

このエラーログの下にある Click to set up path mappings をクリックして、マッピング情報を設定する。

あとは、再度実行したら、ブレークポイントで止まってくれるはずです。

実行時にエラー出して欲しかったわー。