🐈
PHPのデバッグでステップ実行したい
ステップ実行とは?
プログラムを一行ずつ実行し、変数の値を確認しながら不具合の原因を発見する手法。PHPの場合は、TCP/IP経由になるのでリモートデバッグに含まれる機能になります。[1]
リモートデバッグによるステップ実行の設定
XDebugのインストール
sudo port install php84-xdebug
リモートデバッグの設定
/opt/local/etc/php84/php.ini に、以下の設定を追加する
/opt/local/etc/php84/php.ini
[xdebug]
xdebug.mode=debug ; ステップ実行・ブレークポイントを有効にする
xdebug.start_with_request=yes ; 全てのリクエストで自動的にデバッグ接続を試みる
xdebug.client_host=127.0.0.1 ; リモート接続元(開発PCのIP)
xdebug.client_port=9000 ; Xdebug3からは9003がデフォルト
xdebug.log=/tmp/xdebug.log ; 任意。トラブルシュート用
xdebug.mode は、Xdebug の動作モードを指定する。カンマ区切りで複数指定も可能。
| モード | 説明 |
|---|---|
off |
Xdebug を完全に無効化 |
develop |
エラースタックトレースや変数のヒント表示を有効に |
coverage |
コードカバレッジ分析(ユニットテスト向け) |
debug |
ステップ実行・ブレークポイントなどを有効に |
gcstats |
ガーベジコレクション統計を収集 |
profile |
パフォーマンス解析用のプロファイリング |
trace |
関数の呼び出し情報などのトレースを出力 |
xdebug.start_with_request は、リクエストのたびに Xdebugのデバッグ機能を自動で開始するかどうかの設定。
| 値 | 説明 |
|---|---|
yes |
すべてのリクエストで自動的にデバッグ接続を試みる(最も確実) |
no |
明示的に XDEBUG_SESSION_START をURLやCookieで指定しない限り、デバッグしない |
trigger |
特定の条件(例:クッキー XDEBUG_TRIGGER がある時)でのみデバッグを有効にする |
Eclipseの設定
Portの確認
-
Preferences...を開く - 左ペインから、
PHP→Debug→Debuggersを選択する -
Debugger TypeからXdebugを選択する -
Debug Portが9000になっていることを確認する
Webの設定
-
Preferences...を開く - 左ペインから、
PHP→Debugを選択する -
Server SettingsのPHP Servers...をクリック -
Built-in PHP Serverをクリックしてnextボタンを押す。(Generic PHP Serverでも同じ) -
Server Nameをlocalhost -
Base URLをhttp://localhost -
Document Rootは空欄にしてFinishを押す。
CLIの設定
-
Preferences...を開く - 左ペインから、
PHP→Debugを選択する -
CLI SettingsのPHP Executables...をクリック -
Add...ボタンを押す -
NameにPHP84 -
Executable pathに/opt/local/bin/php82 -
PHP ini fileに/opt/local/etc/php82/php.ini -
SAPI TypeにCLIを設定し登録する
Break at First Line
Break at First Line はデフォルトで有効になっている。
この設定は、スクリプトの実行前に必ず一時停止して、デバッガーに移動して処理の実行を行う必要がある。
不慣れな初心者にとっては分かりやすいのだが、操作に慣れてくると煩わしいと感じる。
そこで、ブレイクポイントに処理が到達した時だけステップ実行するように設定を変更する。
-
Preferences...を開く - 左ペインから、
PHP→Debugを選択する -
Break at First Lineのチェックを外す
どうも設定が反映されない時は…
赤い四角の停止ボタン 🟥 を押して、デバッグセッションのプロセス(?)を一旦切ってみる。
改めてXDebugに接続すると設定が反映されるかもしれない。
リモードデバッグの設定は、上手く動いたり動かなかったりするので、動かなかったら諦めるのがよい。イライラしてはいけない。
-
つまり、インターネット経由で、本番環境をステップ実行でデバッグすることができる。 ↩︎
Discussion