背景・動機
- デバッグ作業をする際にvar_dumpなどを使って出力していた。
- 場合によっては20個くらいvar_dumpするので、かなり非効率。
- マスターのソースコードに消し忘れたvar_dumpが混入している。
XDebug使えば?と言われて使ってみたらかなり便利で世界が変わったので、共有したいと思い投稿しました。
前提
- Vagrantで起動されたPHP環境がある。
- XDebugはインストール済み。
- VSCodeにPHP Debugプラグインがインストール済み。
手順
- Vagrantのphp.iniファイルでXDebugを有効化
- VSCodeのlaunch.jsonにデバッガの設定を追加
- Chrome拡張をインストール
- ブレークポイントをはる
- デバッグモードにする
- アプリケーションを起動
1. Vagrantのphp.iniファイルでXDebugを有効化
php.iniファイルに以下の設定を追記します。
追記後はservice httpd restart
しましょう。
xdebug.remote_enable=1
xdebug.idekey="vscode"
xdebug.remote_host=192.168.33.1
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_connect_back=1
xdebug.remote_log=/tmp/xdebug.log
2. VSCodeのlaunch.jsonにデバッガの設定を追加
VSCode左メニューのデバッグアイコンをクリックし、左上の歯車アイコンをクリックするとjsonファイルが開くので、以下のように追記します。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"serverSourceRoot": "/path/to/app",
"localSourceRoot": "${workspaceRoot}"
}
]
}
3. Chrome拡張をインストール
※対象のアプリケーションがWebAPIなどの場合は、GETパラメータにXDEBUG_SESSION_START=vscode
を追加することで、この手順を省略できます。
4. ブレークポイントをはる
![スクリーンショット 2019-11-28 15.46.07.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F127338%2Ffaeba2eb-d49d-87d0-7dd3-ad62904eaf73.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6e11d6ea5ab7ee03a1fffb662b3e3329)
- VSCode上で任意の行番号の左をクリック。
5. デバッグモードにする
![スクリーンショット 2019-11-28 15.46.26.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F127338%2F8691dfcf-ed84-ba6e-fff7-26b1cdd15b52.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=93e185bdefb80a925964dcec79cfb346)
- 左メニューの虫アイコンをクリックし、デバッグ右の▶︎をクリック。
6. アプリケーションを起動
![スクリーンショット 2019-11-28 15.47.50.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F127338%2Fed600d6b-421a-1528-5d60-c970ac1c2a8c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f623f8ee44f3cfd94b80900852530a39)
- アプリケーションを起動すると、ブレークポイントをはった行で実行が止まり、変数の中身が一覧されます。
デバッガ便利なので是非使ってみてください。