還暦過ぎたエンジニアの挑戦

還暦過ぎても好奇心だけは忘れない エンジニア Hikaruのブログ

MENU

Xdebug3で躓いた

散歩の途中で(本文とは関係ありません)

事の発端

エンジニア、プログラマにとって不可欠と言って良い存在の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 へのアップグレード(日本語)

まあ、つまづいてもエンジニアは楽しいです。


 

Hikaru

*1:開発者用の環境のことです。自分のマシンでサーバーと同様にプログラムを動作させることができます