phpのデバッグでNetBeans+xdebugを使おうとしたのですが
- ポート(9000)は開いているしtcpdumpした感じはちゃんと通ってる。
- phpinfo()でもちゃんとxdebugがenableになっているし、設定もうまくいっているように見える。
- NetBeansで「最初の行で停止」にチェックをつけると、最初の行では止まってくれる。
- ブレークポイントで止まってくれない。デバッグ文でコード自体は通っていることは確認済み。
原因
原因はパスマッピングでした。
NetBeansで[プロジェクト・プロパティ]>[実行構成]で[詳細]ボタンを押下すると、[詳細Web構成]のダイアログが出るので、こちらに適切なサーバー・パスとプロジェクト・パスを設定します。
今回、開発環境としてはホストOSにWindows、ゲストOSにUbuntuを使い、ゲストOS上にコードやWebサーバなどの実行環境を配置し、実際のコーディングと動作確認はホストOSからSamba、ブラウザ、HTTPクライアントを使って行うという構成にしています。 なので、サーバー・パスはゲストOS側(xdebugが動く方)のパスを設定し、プロジェクト・パスはホストOSから見たゲストOS内のコードが配置されているパスを指定すればOKでした。言われてみれば、ブレークポイントを配置したファイルと、実際に動いているphpファイルのマッピングが出来なければデバッグなんて出来ないですよね…。
ちなみに、Ubuntuだとxdebugのインストールと設定はこんな感じでいけます。
1. xdebugインストール
$ sudo apt-get install php5-xdebug
※web上で検索すると、peclでやっているケースがほとんどなんですが何故かうまくいかず…なのでaptで。
2. php.iniに以下を記述
[xdebug]
zend_extension="/usr/lib/php/20131226/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=10.0.2.2
※今回の場合はremote_hostはゲストOSから見たホストOSのIPアドレス
3. apacheリロード
$ sudo service apache2 reload
これでphpinfo叩いてxdebugがenableな感じになっていればOK。