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
をクリックして、マッピング情報を設定する。
あとは、再度実行したら、ブレークポイントで止まってくれるはずです。
実行時にエラー出して欲しかったわー。