事の発端
エンジニア、プログラマにとって不可欠と言って良い存在のXdebug。
Hikaruも長いことお世話になっています。
特にバグ潰しには威力を発揮します。
動きがおかしいと思われるプログラムがあったとき、
問題のありそうなプログラムステップで停止させ、
その時点の変数の内容やメソッドの結果を知ることができる
エンジニアにとって神みたいな存在です。
その結果、
テストでは知り得なかった思わぬ結末が待っていたりもするのですが、
問題解決に威力を発揮することは論を待たないです。
ところが、そんなXdebugですが、
どうやら2020年にそれまでのXdebug2から3にバージョンアップされていたらしいです。
そんなことを知らずに、
新たにDockerのコンテナ*1を立ち上げたのが運の尽きでした。
Xdebugでステップ実行できない
いつも通りに設定したつもりでした。
いや、正確にはいつものphp.iniの設定をコピーしていました。
左うちわで。。。
しかし、どうにもステップで停止できない。
つまり、デバッガーとして役に立たない。
なんで??
落ち着け!
まずは
echo phpinfo();
ん?
いつのまにXdebug3に! Xdebug2じゃなかったの?
というわけでようやく設定の誤りを見つけました。
Xdebug3の基本設定はこれ
解説書ではないので結論だけ
Hikaruの設定
Xdebug2(今まで) | Xdebug3(これから) |
---|---|
xdebug.remote_enable = 1 | xdebug.mode = debug |
xdebug.remote_autostart = 1 | xdebug.start_with_request = yes |
xdebug.remote_host = host.docker.internal | xdebug.client_host = host.docker.internal |
xdebug.remote_port = 9000 | xdebug.client_port = 9000 |
xdebug.remotelog=/tmp/xdebug.log | xdebug.log = /tmp/xdebug.log |
ざっくり言って「remoteなんちゃら」というパラメータは廃止されたらしいです。
動くわけないですね。
ちなみにXdebugのデフォルトのportは9000から9003に変更されているようですが、Hikaruはそのまま9000で設定しました。
お急ぎの方はこちらをコピペ
同じような悩みを持っている人がいたらこちらからどうぞ。
xdebug.mode = debug xdebug.start_with_request = yes xdebug.client_host = host.docker.internal xdebug.client_port = 9000 xdebug.log = /tmp/xdebug.log
もっと詳しく知りたい方はこちら
Xdebug 2 から 3 へのアップグレード(日本語)
まあ、つまづいてもエンジニアは楽しいです。
*1:開発者用の環境のことです。自分のマシンでサーバーと同様にプログラムを動作させることができます