1.何が起きたか
EclipseでPHPファイルをデバッグモードで実行しようとしたところ、下記エラーが出て実行できませんでした。
「起動エラー:起動構成'sample(ファイル名)'がデバッグ・モードで開始できませんでした。'Default PHP Web Server'サーバー構成に対応するデバッガーが指定されていません。」
【環境】
- Eclipse
Pleiades All in One>Eclipse2024>PHP Windows x64 Full Edition(Version: 2024-12 (4.34))
Apacheのポート番号は80(下記スクショ参照)
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か月前!)のこちらのつぶやきを発見。
リンク先の下記ブログ記事(つぶやき元の67th Starさんが書かれたもの)をメインで参照させていただきました。ありがたい…。
「eclipseでXdebugを有効にする、ブレークポイントに止まらない症状も修正」(67th Star)
2-c.解決方法
1. https://xdebug.org/wizard
にアクセス。
2. アクセス先の枠(下スクショ)にphpinfo情報を貼り付け、「Analyse my phpinfo() output」を押下。
※phpinfo情報の確認方法
「Pleiades All in One」を設定済みならapacheを起動して下のURLよりphpinfoを確認できる。
(引用元:「eclipseでXdebugを有効にする、ブレークポイントに止まらない症状も修正」67th Star)
http://localhost/dashboard/phpinfo.php にアクセスすると下記が表示される。
スクショ部分の下部にも
「HTTP Headers Information、bcmath、bz2、calendar、Core、(中略)、PHP Credits、PHP License」
と項目が続いており、どの部分をコピペしたらよいのか迷ったが、「Ctrl+A」で全選択してコピペした。
3. dllファイルをダウンロード
表示されたリンク(下記赤枠)を押下。
(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 へのアップグレード」)
※この時点でphp.iniの内容を確認すると・・・
最下行に下スクショの文言が自動追加されていた。
※67th Starさんのブログ記事で紹介されていた方法はここまで。67th Starさんはここまでの方法で、デバッグが正常作動するようになったとのこと。
→しかし、私はこの方法だけでは正常作動しなかった。(デバッグ時にブレークポイントで止まらない現象が起きた。(下記「3.結果」の[3. 問題発生]参照))
→この方法に加えて下記「3.結果」の [4. Eclipseの設定を修正]と[6. ApacheとMySQLを再起動]を実行したら、正常作動するようになった。
3. 結果
1. パースペクティブ設定
Eclipseの上部「ウィンドウ」>パースペクティブ>パースペクティブを開く>デバッグ
2. デバッグ実行
デバッグ実行したいphpファイルを右クリック>デバッグ>3 PHP Webアプリケーション
3. 問題発生
デバックは無事実行できたけど、ブレークポイントで止まらない(変数タブに何も表示されない&停止ボタンは赤色に色づいているけど、ステップオーバーとステップインのボタンは色づいておらず押せない)
4. Eclipseの設定を修正
①Eclipseの上部「ウィンドウ」>設定>PHP>インストール済みのPHP
「PHP8(以下略)」を選択>編集>デバッガー>ポート番号を確認
9000になってる!!→9003に変更>OK>適用して閉じる
②Eclipseの上部「ウィンドウ」>設定>PHP>デバッグ>デバッガーを選択→Xdebugを選択→構成
→デバック・ポートを9000から「9003」に変更。
→リモートセッション受信(JIT)が「localhost」になっているので「プロンプト」に変更。
→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デバッグ(下スクショ)が表示される。→「はい」
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を有効にする、ブレークポイントに止まらない症状も修正」67th Star