🐈

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の確認

  1. Preferences... を開く
  2. 左ペインから、PHPDebugDebuggers を選択する
  3. Debugger Type から Xdebug を選択する
  4. Debug Port9000 になっていることを確認する

Webの設定

  1. Preferences... を開く
  2. 左ペインから、PHPDebug を選択する
  3. Server SettingsPHP Servers... をクリック
  4. Built-in PHP Server をクリックして next ボタンを押す。(Generic PHP Serverでも同じ)
  5. Server Namelocalhost
  6. Base URLhttp://localhost
  7. Document Root は空欄にして Finish を押す。

CLIの設定

  1. Preferences... を開く
  2. 左ペインから、PHPDebug を選択する
  3. CLI SettingsPHP Executables... をクリック
  4. Add... ボタンを押す
  5. NamePHP84
  6. Executable path/opt/local/bin/php82
  7. PHP ini file/opt/local/etc/php82/php.ini
  8. SAPI TypeCLI を設定し登録する

Break at First Line

Break at First Line はデフォルトで有効になっている。
この設定は、スクリプトの実行前に必ず一時停止して、デバッガーに移動して処理の実行を行う必要がある。
不慣れな初心者にとっては分かりやすいのだが、操作に慣れてくると煩わしいと感じる。
そこで、ブレイクポイントに処理が到達した時だけステップ実行するように設定を変更する。

  1. Preferences... を開く
  2. 左ペインから、PHPDebug を選択する
  3. Break at First Line のチェックを外す

どうも設定が反映されない時は…

赤い四角の停止ボタン 🟥 を押して、デバッグセッションのプロセス(?)を一旦切ってみる。
改めてXDebugに接続すると設定が反映されるかもしれない。
リモードデバッグの設定は、上手く動いたり動かなかったりするので、動かなかったら諦めるのがよい。イライラしてはいけない。

脚注
  1. つまり、インターネット経由で、本番環境をステップ実行でデバッグすることができる。 ↩︎

Discussion