- ベストアンサー
VSCodeでページをまたぐデバッグ
Eclipseですと inputform.php から confirm.phpやpost.phpなどにページを変遷するような場合も継続してデバッグできますが、VSCode同じようなことは可能でしょうか? アドバイスいただけるとうれしいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Eclipseでも大変だったんですね。 私はVSCodeで大変でした。 検索すれば色々と情報があるのですが、 みんなちょっとずつ違っていて、 どれもうまくいかず、 まぜるな危険と思いつつも、 いろんなものをまぜたりして遠回りした結果、 私なりに絶対に必要な最小構成にたどりついたつもりです。 ひとつずつ確認しながら試していきましょう。 まずは、VSCodeから。 拡張機能の「PHP Debug」は同名のものがあるので、 作者「Felix Becker」、バージョン「1.22.0」かどうか。 次に「launch.json」です。 ポートは「9000」にします。 { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9000 }, 次にポートが動作しているか確認します。 「C:\xampp\htdocs」に「test」フォルダを作成します。 VSCodeでこのフォルダを開いて、 「inputform.php」ファイルを作成します。 空のままでいいので、 「Listen for Xdebug」のデバッグを開始します。 「XAMPP Control Panel」を起動して、 右上にある「Netstat」ボタンを押します。 現在使用中のポートの一覧が表示されます。 Port「9000」でName「Code.exe」があるかどうか。 確認したら、デバッグを終了します。 次にXdebugのdllです。 XAMPPのバージョンが「7.4.25」とのことなので、 付属のdllを使うことにします。 「C:\xampp\php\ext\php_xdebug.dll」があるかどうか。 次に「php.ini」です。 すでにあるものは先頭に「;」を付けてコメントにして、 以下をファイルの最後に追加します。 [xdebug] zend_extension="c:\xampp\php\ext\php_xdebug.dll" xdebug.remote_enable=1 xdebug.remote_autostart=1 ※付属のdllはバージョン2.xで、 初期ポートが「9000」なので省略しています。 「php.ini」が反映されているか確認します。 「XAMPP Control Panel」からApachを再起動します。 ブラウザで「http://localhost/dashboard/phpinfo.php」にアクセスします。 「xdebug.remote_enable」と「xdebug.remote_autostart」が「On」かどうか。 「xdebug.remote_port」が「9000」かどうか。 準備はここまでです。 デバッグを試してみます。 「inputform.php」の内容を以下のようにします。 <form method="post" action="confirm.php"> <input type="text" name="txt1"> <input type="submit"> </form> 「confirm.php」を以下の内容で作成します。 <?php $txt1 = $_POST['txt1']; echo $txt1; 「echo $txt1;」の行をブレークポイントにして、デバッグを開始します。 ブラウザで「http://localhost/test/inputform.php」にアクセスします。 テキストボックスに適当な文字を入力して、送信します。 私の環境では、これでブレークポイントで止まります。 変数の内容も確認できています。
その他の回答 (4)
- dell_OK
- ベストアンサー率13% (766/5720)
同じバージョンで試してみました。 いつもてこずるのになんだかすんなり成功してしまったので、 想像できる、あやしい点をいくつかあげてみます。 php.ini 書かれている内容で成功したので問題なさそうです。 あるとしたら、その上に [XDebug] が書かれていないとか。 phpinfo()を実行して、Xdebugの情報に、 php.iniの設定が反映されているかどうかを確認してみてください。 反映されていないとしたら、[XDebug]がないくらいかなと。 あと、php.iniの変更後はApacheの再起動が必要です。 launch.json 参照URL先の通りならポートが9000なので、 書かれているポートと一致しているので問題ないです。 Xdebugのバージョン3以降は初期値が9003のためか、 VSCodeが自動で作成してくれる内容が9003になっているので、 ここを確認してみてください。 どのブラウザを対象にしているか、とのことですが、 このポートで通信しているので、どのブラウザでも常に監視されています。 ブレークポイントで止まった状態で、 他のブラウザや、他のブラウザタブで同じところにくると、 それもそこで止まりますので、なんか変な感じになります。 あとは、このポートやApacheやVSCodeのファイアウォールです。 随時必要なタイミングで聞かれてきたと思うので、 プライベートもパブリックも許可しておくと大丈夫です。 どちらかと言うとプライベートだけでも大丈夫なはずですが、 現在のネットワークの設定にしたがって、 それが初期値で許可の画面がでるので、初期値のままでも大丈夫なのかも。 これが原因かもしれない場合は、いったん全部許可にするか、 ファイアウォールを無効にして試してみてください。 最後に、止まらずに、ブラウザは続きの処理がされた結果が表示されていますか。 されていない場合ですが、 私の環境では、どう言うわけか、止まってからVSCodeが応答なしのような感じになることがあります。 タスクバーのVSCodeは点滅するので、止まってはいるけど、操作できない感じです。 もしこうなってたら、VSCodeのウインドウバーをつまんで、ちょっと動かすと操作できるようになります。 最近この方法に気づいたのですが、それまで30秒とか1分とか待ってました。 待ったら待ったなりに操作できるようになっていたのですが、使い物にならない感じで・・・。 現在想像できるのは、これくらいです。 全然問題ないようでしたら、他の原因かも知れませんので、改めて遠慮なく質問してください。
お礼
すみません。 参考ページに次の一文があるのを読み漏らしていました。 『この状態で、「localhost/vscodephp_01/」にアクセスし、何か適当な文字を入力して[Submit]ボタンをクリックすると、実行が中断され、VS Codeに制御が移る。』 Eclipseみたいに対象ページが自動的に開くものと思っていましたが、ページの指定はブラウザ上から手動でしなければならない、ということなんですよね? "Launch Built-in web server"、"Listen for Xdebug" ともに同じ?動きをしています。
補足
何度もありがとうございます。Eclipseの設定でも大抵、疲れ果てましたが、今回も似たものがあります。w > VSCodeが自動で作成してくれる内容が9003になっているので、 再インストールし、9003でやり直しましたが、だめでした。 > このポートやApacheやVSCodeのファイアウォールです。 ファイアウォールをOFFにしましたが、だめでした。 > 最後に、止まらずに、ブラウザは続きの処理がされた結果が表示されていますか。 VSCodeの画面上の方に操作パネル(llや矢印や□)が表示、コールスタックが実行中と表示されているだけでほかに何かが動いている様子はありません。 ただ、当初、私が参考にしていたサイトでは"Listen for XDebug"を選択するようになっていましたがLauch.jsonに"Launch Built-in web server"があったのでそちらを起動してみましたところ、"ほぼ"当初、"Listen for XDebug"で期待していた動きをするようになりました。"ほぼ"というのはページ間でのやりとりやVSCodeへ制御が戻ってブレークもしてくれるのですが、デバッグを開始して最初の開くのが対象PHPファイルでなくて、ApacheのDocument Rootに固定されてしまっていて、そこからデバッグ対象のファイルを探さなければいけない状態になっています。 ちなみに設定は次の通りで、デフォルトからポート番号を80に変えただけです。 "name": "Launch Built-in web server", "type": "php", "request": "launch", "runtimeArgs": [ "-dxdebug.mode=debug", "-dxdebug.start_with_request=yes", "-S", "localhost:80" ], "program": "", "cwd": "${workspaceRoot}", "port": 9003, "serverReadyAction": { "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started", "uriFormat": "http://localhost:%s", "action": "openExternally"
- dell_OK
- ベストアンサー率13% (766/5720)
気になったのでPHP8.xでも確認してみました。 結論はデバッグ可能です。 Xdebugのバージョンが3の場合は、 php.iniのパラメータ名がずいぶん違うようです。
補足
次のページにブラウザからVSCodeに制御が戻るというのがありましたのでやってみました。 https://atmarkit.itmedia.co.jp/ait/articles/1809/11/news028_3.html Launch currently open scriptモードではブレークポイントで停止しましたが、Listen for Xdebugモード停止はしませんでした。 また、ブラウザ上のイベントに対して制御がVSCodeに戻ってくるとありますが、ブラウザソフトがいくつも入っている場合、どれが対象であるかはどこで判断しているのでしょうか? 環境は次の通りです。 [OS] Windows10 Pro x64 [xampp] xampp-windows-x64-7.4.25-0-VC15 [xdebugger] php_xdebug-3.1.1-7.4-vc15-x86_64.dll [php.ini] zend_extension="c:\xampp\php\ext\php_xdebug-3.1.1-7.4-vc15-x86_64.dll" xdebug.mode = debug xdebug.start_with_request = yes xdebug.client_port = 9000 お手数かけますが、よろしくお願いいたします。
- dell_OK
- ベストアンサー率13% (766/5720)
バージョンはすべて最新でかまわないと思います。 ただ、私はまだPHPのバージョン8.xを使っていません。 仕事や個人で使っているレンタルサーバーが対応していないためです。 なので、PHPは7.4.xのXAMPPを使っています。
- dell_OK
- ベストアンサー率13% (766/5720)
いろいろと準備が必要ですが可能です。 私の開発環境は、 OSはWindows 11、 PHPはXAMPPで、付属のXdebugを使い、 VSCodeは拡張機能のPHP Debugを入れてデバッグしています。
お礼
ご回答ありがとうございます。取り急ぎ、ツールをそろえてみます。
補足
バージョンはそれぞれ最新で問題ないでしょうか?
お礼
いろいろと、ありがとうございました。 なんとか解決できました。 ほかにもいろいろ抱えてますので、またよろしくお願いいたします。