俺がPHP環境作っていてXdebugが動かない(DBGpからのコネクトバックが来ない?)と思った時のメモ

掲題のとおりです作業メモです。 昨日今日から zendframework/zend-stratigility 触ってます楽しいですしかしブレイクポイント貼れないのがストレスどうにかするぞ、と思ったときのメモです。

xdebug食っているか見る

  • php自体が食っていてもサーバー側(Apacheとか)が食っていないみたいな自体があったら嫌だから確認しましょう
  • phpinfo() するか php -i |grep xdebug

Dockerイメージ、php:7.2-apache でやった時は

  • RUN pecl install xdebug-2.6.0 && docker-php-ext-enable xdebug を忘れずにね
  • /usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so にモジュールあるよ

DBGpからのコネクトバックが来るか確認

  • コンテナ側で「9000番に飛ばしていますか」を見る
sudo tcpdump -nn  dst port 9000

正解例:

root@8a529e47bb64:/var/www/html# tcpdump -nn dst  port 9000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
09:59:17.461157 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [S], seq 1168735218, win 29200, options [mss 1460,sackOK,TS val 65964320 ecr 0,nop,wscale 7], length 0
09:59:17.466740 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [.], ack 452897992, win 229, length 0
09:59:17.466918 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 0:490, ack 1, win 229, length 490
09:59:17.469833 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [.], ack 38, win 229, length 0
09:59:17.470018 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 490:713, ack 38, win 229, length 223
09:59:17.473338 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 713:934, ack 73, win 229, length 221
09:59:17.476681 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 934:1158, ack 113, win 229, length 224
09:59:17.477883 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 1158:1389, ack 158, win 229, length 231
09:59:17.479941 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 1389:1610, ack 193, win 229, length 221
09:59:17.481909 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 1610:1806, ack 210, win 229, length 196
09:59:17.483123 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 1806:2020, ack 222, win 229, length 214
09:59:17.484186 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 2020:2320, ack 237, win 229, length 300
09:59:17.485338 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 2320:2548, ack 295, win 229, length 228
09:59:17.486849 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 2548:2777, ack 350, win 229, length 229
09:59:17.488071 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 2777:3046, ack 409, win 229, length 269
09:59:17.491217 IP 172.23.0.3.39156 > 192.168.65.2.9000: Flags [P.], seq 3046:3311, ack 468, win 229, length 265

xdebug.remote_host をいじってみる

docker.for.mac.host.internal で動くはずなんだけど。
デバッグのときの前提は「素直な気持ちになれ」「先入観を捨てろ」なので、「より確実に動く方!!」に近づいていきましょうってことでhostを決め撃ちしてみる。
tcpdumpで「宛先」がわかっているはず

ちなみに動くxdebug.ini

これで今は動いてる。

zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.remote_host = docker.for.mac.host.internal
xdebug.remote_port=9000

Serversの設定について

うまく接続が返ってくれば、自動的に設定ダイアログが開くのでソレを待っても良い気がする。f:id:o0h:20180603191243p:plain