NetbeansのPHPデバッグで、開始ファイルがphpでないとブレークポイントが動作しない(解決)
NetbeansにてPHPのデバッグでブレークポイントが動作しない。環境は以下の通り。
状況
xdebugの設定には以下を記述してあった(Ubuntuではphp.iniではなく以下のxdebug専用の設定ファイルが設けられていた)。
/etc/php/7.0/apache2/conf.d/20-xdebug.ini
zend_extension=xdebug.so xdebug.remote_enable=on xdebug.idekey="netbeans-xdebug"
Netbeansのプロジェクト・プロパティ→実行構成の「開始ファイル」にはhtmlファイルを指定していた。
「開始ファイル」にphpファイルを指定してある場合(もしくは「開始ファイル」を空欄にしてプロジェクトURLの最後にphpファイルが来る場合)は、デバッグ実行でブレークポイントが動作するが、htmlファイルを指定するとブレークポイントが動作することなく最後まで実行されてしまった。
対応
/etc/php/7.0/apache2/conf.d/20-xdebug.iniに以下を追記したところ、デバッグを実行した際にブレークポイントが動作した。
xdebug.remote_autostart=on
参照サイト
- php - 止まらない - xdebug インストール - 解決方法 - CODE Q&A
まさにこれが原因だった。私は同じ問題を抱えていました。そして、ついに、私のphp.iniは、この2つの重要な設定が欠落していました。
xdebug.remote_autostart = "On"
xdebug.remote_enable = "On"他の回答にも似た状況と対応方法の記載があった(以下の引用)。最初のページがhtmlフォームで、そこからphpファイルに飛んでいてブレークポイントが動作しないこと。インデックスファイル(開始ファイル)をphpファイルに設定していないと、ブレークポイントが動作しないこと、と同じ状況だった。
対応は、サーバでPHPが動作している限り、htmlファイルの拡張子を「.php」に変えても問題ないので、最初のhtmlページの拡張子をphpに変えてしまうことだった。私のHTMLフォーム(testform.html)はPHPスクリプト(runQuery.php)を呼び出していました。Netbeansは私のrunQuery.phpの設定されたブレークポイントでブレークできませんでした
このようなフォーラムを検索して、php.iniとNetbeansのすべての設定を確認した後、プロジェクトのインデックスファイルがPHPファイルの場合、netbeansはブレークポイントを破るだけです。 これは非常に重要です。そうでなければ、ブレークポイントが機能しない理由を理解しようと時間を費やすことになります。
Netbeansでは、File / Project Properties / Run Configurationに入り、IndexファイルがPHPファイルであることを確認します。 私の場合、私はインデックスファイルをtestform.htmlからtestform.phpに変更し、それが機能したので、ブレークポイントを破ることができました。 - [PHP] Xdebug のリモートデバッグ、理解していますか? - Qiita
HTTPリクエストを受け付ける方式の場合 XDEBUG_SESSION_START=xxx というパラメータを付けてアクセスすると、はじめて Xdebug のリモート・セッションが ON になります。
しかし、常に自動で開始させることもできます。
xdebug.remote_autostart=1 を設定するとパラメータがなくても自動的にセッションが始まるようになります。確かにデバッグが開始された際、ブラウザのURLで末尾に「?XDEBUG_SESSION_START=netbeans-xdebug」のパラメータが渡されていた。しかし、このままではブレークポイントは動作することなく最後まで実行されてしまっていた。
- PHP/Vagrant/NetBeans環境で デバッグしてもブレークポイントで止まらない原因はパスマッピングだった · atwata developer blog
同様にブレークポイントが止まらない状況で、プロジェクトのプロパティ→実行構成→詳細→パスマッピングの設定をしたところ動作したとのこと。
「サーバ・パス」にページの絶対パスを、「プロジェクト・パス」に「ソース」の「ソースフォルダ」を指定してみたが、ブレークポイントは動作しなかった。