【追記】2018/04/12(木)
1.22.1
のバージョンアップでふと確認した所、 stopOnEntry
を指定しなくてもちゃんと止まるようになっていました。
この記事を書いた際のバージョンが 1.20.1
で、こちらでも再度試したらちゃんとブレークポイントを設定した所で止まりましたので、何か他に原因があったのかもしれません。
#結論
"stopOnEntry": true
を加えたら止まるようになりました。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"stopOnEntry": true,
"log": true,
"pathMappings": {
"/var/www/html": "${workspaceRoot}"
}
}
]
}
#原因
よくわかりません。
これまで、Visual Studio Code
でデバッグしたことは無く、設定なども見よう見まねでやっていたのですが、どうしてもうまく行かず、PHP Debug - Visual Studio MarketplaceのSupported launch.json settings:
を見ていたところ、stopOnEntry
の記述があり、試したら先頭で止まるようになりました。
先頭で止まったら、その後はブレークポイントでも止まるようになりました。
NetBeans
ではすんなりデバッグできましたので、後一歩何かが足りないのだろうという状況でした。
#Xdebugでうまく行かないと言う時に確認する所
PHP
はずっと昔にちょっと使った程度で、ほとんど知識がありません。
とりあえず自宅環境でVagrant
で適当に環境構築を進めましたが、色々と知らなすぎて、どこが悪いかも最初は把握するのに苦労しました。
今回の環境はWindows 7
、Vagrant
でcentos/7
のboxを使用。
記事を参考にまずはPHP
のインストールとXdebug
をインストール。
その後、、、
1. ともかく、<?php phpinfo(); ?>
を実行させて結果を見る
サーバー側で php -i
の結果をgrep
などで確認してもよいかもしれませんが、ブラウザで見れた方が勝手が良いかと思いますので、ここでアドレスやらポートやらの確認を。
そして、Xdebugが有効になっているか確認を。
次の表示でのwith Xdebug
の部分が出ていればXdebugは読込まれています。
(※最初zend_extension=xdebug.so
の指定が間違えているのではと悩みました)
2. そもそも設定はどこにあるのか
何かしらの記事を参考にしていると環境によってパスが異なるので、自分の環境のどこにファイルがあるのかわからない場合もあるかと思います。
phpinfo()
の結果かもしくはphp -i
の結果で、Loaded Configuration File
の部分がそもそものphp.ini
のありか。
他、Additional .ini files parsed
にxdebug.ini
があるかと思いますので、ブラウザでとにかくxdebug
で検索してみるか、php -i | grep xdebug.ini
などで確認するとわかるんじゃないかなと思います。
3. xdebug.remote_port は 9000で
これはちょっと恥ずかしい話ですが、現状9000
以外の設定で行なうとうまくいっていません。NetBeans
の方でもです。
なので、特別な事情でもなければ、ともかくデフォルトの9000
で行った方が無難そうです。
4. xdebug.remote_host もいっその事設定しない
xdebug.remote_host
はxdebugを送信側として、受信側のアドレスとなるようなので、デバッグを行なうクライアント側のアドレスを入力すればよく、phpinfo();
での$_SERVER['REMOTE_ADDR']
の値を設定すればよいのだと思いますが、よくわからなければ、xdebug
の設定をxdebug.remote_connect_back = 1
とすれば、何とかなるかと思います。
逆に、xdebug.remote_connect_back = 1
でダメな場合もあるようなので注意。
5. Apacheの再起動を忘れずに
sudo systemctl restart httpd
など、Apache
の再起動を忘れずに。
設定変更してこれを忘れて、うまく行かずに、別の設定を試すと言う事をしてしまうと迷宮まっしぐらです。
6. 結局行き着いた設定
最終的に、自分の環境では次のように設定しています。
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
これで、NetBeans
もVisual Studio Code
でもデバッグできるようになりました。
"stopOnEntry": true
で止まるようになるまでが長い道のりでした。
以上
#参考にした記事など