この記事は、前回のPHPのデバッグ環境構築の備忘録(Xdebugの設定)①の続きとして、Xdebugを使ったデバッグ手順を実際のサンプルコードをもとに整理したものです。
自分で見直す用としてまとめていますが、同じ環境で開発する方の参考にもなれば嬉しいです。
検証環境
- PHP: 8.4.6
- Xdebug: 3.4.2
- Docker: 27.2.0
- Docker Compose: 2.29.2
- VS Code: 1.101.0
- Dev Containers: 0.417.0
Xdebugを使ったデバッグの方法まとめ
1. 前提
- 前回までで Xdebug のインストールと設定が完了しており、デバッグ環境が整っている状態。
- VS Code を使用してリモート開発を行っている。
- 今回の例では、
sample.php
というサンプルコードを用いてデバッグを行います。
2. サンプルコードの内容
sample.php
のコードでは、以下の処理を行います:
- 配列
$numbers = [1, 2, 3]
を用意。 - 配列内の値を2倍にした新しい配列
$doubleNumbers
を作成。 - 最終的に
$doubleNumbers
の中身をprint_r
で出力。
サンプルコード
<?php
$numbers = [1, 2, 3];
$doubleNumbers = [];
foreach ($numbers as $number) {
$doubleNumbers[] = $number * 2;
}
print_r($doubleNumbers);
3. デバッグの開始手順
-
VS Codeでプロジェクトを開く
- VS Code のリモート開発機能を使い、プロジェクトを開く(例:
www/html
ディレクトリ)。 - 必要に応じてターミナルで現在のファイルを確認(例:
ls
コマンドでsample.php
を確認)。
- VS Code のリモート開発機能を使い、プロジェクトを開く(例:
-
デバッグ機能を起動
- 左側の虫眼鏡マーク(デバッグアイコン)をクリック。
- デバッグ構成(例:
Lesson 4: Xdebug
)を選択。 - 実行ボタンを押してデバッグを開始。
4. デバッグの基本操作
(1) ブレイクポイントの設定
- ブレイクポイントとは、コード実行を一時停止するポイントです。
-
sample.php
の4行目(foreach
文の行)や10行目(print_r
の行)にブレイクポイントを設定。
(2) プログラムの実行
- デバッグモードでプログラムを実行。
- 実行すると、設定したブレイクポイントでコードの実行が一時停止します。
(3) 変数の確認
- 停止した状態で、現在の変数の状態を確認できます。
-
左側の変数ウィンドウ:
- 現在の変数やその値が一覧表示されます。
-
デバッグコンソール:
- 変数名を入力して値を確認。
- 例:
echo $numbers;
→ 配列[1, 2, 3]
が表示される。
-
左側の変数ウィンドウ:
(4) ステップ実行
- ステップ実行(コードを1行ずつ実行する機能)を使うことで、処理の流れを確認可能。
- 「次のステップに進む」ボタンを押して、1行ずつコードを実行。
- 各ステップで変数の中身を確認。
5. デバッグの流れの例
(1) 4行目のブレイクポイント
- ブレイクポイントに到達した時点で、以下の変数の状態を確認:
-
$numbers
→[1, 2, 3]
-
$doubleNumbers
→null
(まだ初期化されていない)。
-
(2) ステップ実行
-
foreach
のループを1回ずつ実行することで、$doubleNumbers
に2倍の値が追加されていく様子を確認。- 1回目:
$doubleNumbers
→[2]
- 2回目:
$doubleNumbers
→[2, 4]
- 3回目:
$doubleNumbers
→[2, 4, 6]
- 1回目:
(3) 10行目のブレイクポイント
- 配列
$doubleNumbers
の最終的な値([2, 4, 6]
)を確認。
6. デバッグコンソールの使い方
デバッグコンソールでは、以下の操作が可能です:
-
変数の値を確認
- 入力:
$numbers
→ 出力:[1, 2, 3]
- 配列の特定の要素を確認:
$numbers[0]
→ 出力:1
- 入力:
-
簡単なコードの実行
- 例:
$sum = array_sum($numbers);
→$sum
が計算される。
- 例:
7. デバッグを終了する方法
- デバッグ終了後は、以下のいずれかの方法で処理を再開または停止します:
- 続行ボタン(再開): 残りのコードを一気に実行し終了。
- 停止ボタン: デバッグを完全に停止。
8. デバッグのメリット
-
エラーの正確な特定:
- どの行でエラーが発生しているか、変数の値を確認することで特定可能。
-
コードの動作を詳細に把握:
- ステップ実行を使って、コードが意図通りに動作しているか確認。
-
効率的なデバッグ:
- 従来の
var_dump()
やprint_r()
を多用する手法に比べ、効率的かつ直感的に問題を解決可能。
- 従来の
9. 注意点
-
Xdebugの設定確認:
-
正しく動作しない場合、
php.ini
で Xdebug の設定が有効になっているか確認。 -
必要な設定例:
zend_extension=xdebug xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=127.0.0.1 xdebug.client_port=9003
-
-
VS Codeのデバッグ設定:
-
.vscode/launch.json
に適切な設定が必要。 -
例:
{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003 } ] }
-
10. まとめ
-
デバッグの流れ:
- ブレイクポイントを設定 → プログラム実行 → ステップ実行で状態確認 → 問題箇所を特定。
-
Xdebugの利点:
- 手動でデバッグ用コードを記述する必要がなく、効率的にコードの動作確認が可能。
-
VS Codeとの統合:
- VS Code内でデバッグ操作、ターミナル操作、変数確認が一括で行える。
以上が、Docker × VS Code × Xdebug を使ったPHPデバッグ環境の構築手順です。
独学でつまずいたポイントや設定の流れを、自分でも見返せるようにまとめました。
環境構築やデバッグで悩んでいる方の参考になれば幸いです。