Eclipse(PHP)「デバッグ・モードで開始できませんでした」→デバッガー(Xdebug)をダウンロードして解決！

# 1.何が起きたか
EclipseでPHPファイルをデバッグモードで実行しようとしたところ、下記エラーが出て実行できませんでした。
「起動エラー：起動構成'sample(ファイル名)'がデバッグ・モードで開始できませんでした。'Default PHP Web Server'サーバー構成に対応するデバッガーが指定されていません。」
![2025-02-07_14h20_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/35715294-856b-f135-ed6b-a1da157dd61a.png)

【環境】
* Eclipse
Pleiades All in One＞Eclipse2024＞PHP Windows x64 Full Edition（Version: 2024-12 (4.34)）
Apacheのポート番号は80（下記スクショ参照）
![2025-02-07_15h30_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/90939345-7622-a889-3dbe-04a7630a45d3.png)


# 2.解決方法
## 2-a.結論
Xdebugを使った。

・Xdebug(デバッガー)のHPからdllファイルをダウンロードし、
・dllファイル名を「php_xdebug.dll」に変更し、
・「php_xdebug.dll」を「\xampp\php\ext」に移動し、
・Eclipseで
　-デバッガーを「Xdebug」とし
　-デバッガーのポート番号を（9000から）「9003」に変更し（3か所）
　-リモートセッション受信(JIT)を（localhostから）「プロンプト」に変更し
・Ecliplseを閉じ、ApacheとMySQLをStopし、
・ApacheとMySQLをStartし、Eclipseを立ち上げると・・・
デバッグできるようになった！！

以下に詳細を記録しました。

## 2-b.解決方法に出会うまで
「Eclipse　PHP デバッグできない」等でググるも意外とヒットする記事が少なかった。あっても4年前（2020年）以前の記事で情報が古かった。

なのでXで検索した。

2024年11月3日（2025年2月現在の3か月前！）のこちらのつぶやきを発見。

https://x.com/67th__Star/status/1853052058989138387

リンク先の下記ブログ記事（つぶやき元の67th Starさんが書かれたもの）をメインで参照させていただきました。ありがたい…。
「[eclipseでXdebugを有効にする、ブレークポイントに止まらない症状も修正](https://cross.tokyo/2024/11/03/enabling-xdebug-in-eclipse#google_vignette)」（67th Star)

## 2-c.解決方法

**1. https://xdebug.org/wizard
にアクセス。**

**2. アクセス先の枠（下スクショ）にphpinfo情報を貼り付け、「Analyse my phpinfo() output」を押下。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/52ef8e40-2542-525e-d20b-ced08ae49868.png)

### ※phpinfo情報の確認方法

>「Pleiades All in One」を設定済みならapacheを起動して下のURLよりphpinfoを確認できる。
>(引用元：「[eclipseでXdebugを有効にする、ブレークポイントに止まらない症状も修正](https://cross.tokyo/2024/11/03/enabling-xdebug-in-eclipse#google_vignette)」67th Star)

http://localhost/dashboard/phpinfo.php にアクセスすると下記が表示される。
![2025-02-07_15h51_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/a204ba7f-53c8-b83a-2b16-79d76dc550f1.png)

スクショ部分の下部にも
「HTTP Headers Information、bcmath、bz2、calendar、Core、（中略）、PHP Credits、PHP License」
と項目が続いており、どの部分をコピペしたらよいのか迷ったが、「Ctrl+A」で全選択してコピペした。

![2025-02-07_15h58_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/6d6863c7-26c3-6032-65df-a067e858f745.png)

**3. dllファイルをダウンロード**
表示されたリンク（下記赤枠）を押下。
![2025-02-07_16h02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/0467e8b6-25da-8426-b808-512ce1bb0ff6.png)
（Chromeからダウンロードしたら、Chromeにダウンロードをブロックされた。Chromeで表示された「未確認のファイルをダウンロード」を押下してダウンロードを強制実行した。）

**4. dllファイル名を変更**
ダウンロードされたファイル名は「php_xdebug-3.4.1-8.2-ts-vs16-x86_64.dll」だった。
これを「php_xdebug.dll」に変更。

**5. 「php_xdebug.dll」を「\xampp\php\ext」に移動**
ファイル「php_xdebug.dll」を
フォルダ「（省略）\pleiades\（省略）\xampp\php\ext」に移動

**6. Eclipseの設定**
Eclipseの上部「実行」＞「デバッグ構成」でデバッグ構成タブを開く
→「デバッガー」タブ＞「構成」でサーバーの編集タブを開く
→「デバッガー」のプルダウンから「Xdebug」を選択
→ポート番号がデフォルトは9000になっているので、「9003」に変更→「完了」

※ポート番号を9003に変更する理由・・・
>Xdebugの標準のデバッギングポートは 9000 から 9003 へ変更されました。
（引用元：Xdebugウェブサイト「[Xdebug 2 から 3 へのアップグレード](https://xdebug.org/docs/upgrade_guide/ja)」）

※この時点でphp.iniの内容を確認すると・・・
最下行に下スクショの文言が自動追加されていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/fb9ef306-946d-caee-c399-d7b11ff6cbc6.png)

※67th Starさんのブログ記事で紹介されていた方法はここまで。67th Starさんはここまでの方法で、デバッグが正常作動するようになったとのこと。
→しかし、私はこの方法だけでは正常作動しなかった。（デバッグ時にブレークポイントで止まらない現象が起きた。(下記「3.結果」の［3. 問題発生］参照)）
→この方法に加えて下記「3.結果」の **［4. Eclipseの設定を修正］と［6. ApacheとMySQLを再起動］を実行したら、正常作動するようになった。**

# 3. 結果
**1. パースペクティブ設定**
Eclipseの上部「ウィンドウ」＞パースペクティブ＞パースペクティブを開く＞デバッグ

**2. デバッグ実行**
デバッグ実行したいphpファイルを右クリック＞デバッグ＞3 PHP Webアプリケーション

**3. 問題発生**
デバックは無事実行できたけど、ブレークポイントで止まらない（変数タブに何も表示されない&停止ボタンは赤色に色づいているけど、ステップオーバーとステップインのボタンは色づいておらず押せない）
![2025-02-07_17h26_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/16537467-b378-888e-9ad5-db28a6475b19.png)


**4. Eclipseの設定を修正**
①Eclipseの上部「ウィンドウ」＞設定＞PHP＞インストール済みのPHP
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/5a009e18-13c3-428b-0c31-defb88859a29.png)
「PHP8（以下略）」を選択＞編集＞デバッガー＞ポート番号を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/2275c7a4-5a07-9327-2cbe-33a99e656d92.png)
9000になってる！！→9003に変更＞OK＞適用して閉じる

②Eclipseの上部「ウィンドウ」＞設定＞PHP＞デバッグ＞デバッガーを選択→Xdebugを選択→構成
→デバック・ポートを9000から「9003」に変更。
→リモートセッション受信(JIT)が「localhost」になっているので「プロンプト」に変更。
![2025-02-07_17h08_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/defe53e2-6ee5-ff41-a13e-5f04cad1e19e.png)
→OK＞適用して閉じる

**5. デバッグ実行に再挑戦！**
デバッグ実行したいphpファイルを右クリック＞デバッグ＞3 PHP Webアプリケーション
↓
やっぱりできない。

**6. ApacheとMySQLを再起動**
仮説：Apacheを再起動して書き換えられたphp.ini等をリロードする必要があるのではないか？？
検証：Ecliplseを閉じ、XMAPP Control PanelでApacheとMySQLをStop。
（MySQLの再起動は不要かとも思ったが、ついでに再起動してみた。再起動した後で、検証なのだからまずはApacheだけを再起動すれば良かったなと反省。次回同じケースがあったらその際はApacheだけ再起動してみよう。）
→XMAPP Control PanelでApacheとMySQLをStart。Eclipseを起動。

**7. デバッグ実行に再再挑戦！**
デバッグ実行したいphpファイルを右クリック＞デバッグ＞3 PHP Webアプリケーション
↓
PHPデバッグ（下スクショ）が表示される。→「はい」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/b62249d4-3596-d04a-9bb8-348fc8ec2939.png)

↓
できたーーーーー！！！！
![debug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/bde70b19-00b6-e77a-83ed-9e1ea165f339.png)


# 4.最終結果
・Xdebug(デバッガー)のHPからdllファイルをダウンロードし、
・dllファイル名を「php_xdebug.dll」に変更し、
・「php_xdebug.dll」を「\xampp\php\ext」に移動し、
・Eclipseで
　-デバッガーを「Xdebug」とし
　-デバッガーのポート番号を（9000から）「9003」に変更し（3か所）
　-リモートセッション受信(JIT)を（localhostから）「プロンプト」に変更し
・Ecliplseを閉じ、ApacheとMySQLをStopし、
・ApacheとMySQLをStartし、Eclipseを立ち上げると・・・
デバッグできるようになった！！

# 疑問＆回答
## Q1）dllファイルって何？
Dynamic Link Library。
Windowsで使われる「動的リンクライブラリ」。
プログラムが必要な機能を呼び出せるようにするファイルで、例えばphp_xdebug.dllならXdebugのデバッグ機能を提供する。
PHP本体とは別のファイルになっているから、必要なときだけロード（読み込む）して使えるのが特徴。

## Q2）リモートセッション受信(JIT)を（localhostから）「プロンプト」に変更したけど、これは何をしてるの？
「JIT（Just-In-Time）デバッグ」は、スクリプトがエラーを起こしたときにデバッガーを起動する仕組み。

localhost（デフォルト）
→ Xdebugは「localhost（127.0.0.1）」のデバッガー（例えばEclipse）に自動的に接続しようとする。

プロンプト
→ Xdebugがデバッグを開始するときに「どのデバッガーに接続するか？」を聞いてくる。

つまり、デバッグのタイミングで接続先を選べるようになったということ。例えば、複数のデバッガー（Eclipse以外のツール）を使う場合にも便利。
（・・・いまいちよくわからない！！）

## Q3）最後にApacheとMySQLとEclipseを再起動する必要性
dllファイルの変更をApache（PHPの実行環境）に反映させるには再起動が必要。

理由：
php_xdebug.dllは、PHPが起動したときに一度だけ読み込まれる（ApacheがPHPをロードするとき）。だから、Apacheを再起動しないと新しいXdebugの設定が適用されない。
EclipseもXdebugとの接続を確立する必要があるから、再起動して正しく設定を読み込ませる。（再起動しないとPHPが古い設定のまま動いてしまう可能性がある。）

再起動の流れ：
① Apacheを停止（PHPが使っていた古いXdebugを解放）
② MySQLもついでに停止（PHPと連携することがあるため）
③ Apacheを再起動（新しいXdebugを読み込む）
④ MySQLも再起動（必要なら）
⑤ Eclipseを再起動（正しくデバッガーの設定を反映）

# 参考
「[eclipseでXdebugを有効にする、ブレークポイントに止まらない症状も修正](https://cross.tokyo/2024/11/03/enabling-xdebug-in-eclipse#google_vignette)」67th Star

https://rensrv.com/wp/xdebug/install-xdebug-on-eclipse/

https://qiita.com/toontoon/items/f7340a259b7135952ac3

（https://mitosuya.net/not-stop-breakpoints-eclipse）