前文
多くの人と同じように、私は XDebug を使用してプログラムをデバッグするよりも、IDE から XDebug への接続をデバッグすることに多くの時間を費やしてきました。繰り返し動作するようになりましたが、時々、「接続待ち」という一般的な問題が発生します。XDebug が動作または失敗する原因を特定できませんでした。私は2年間ubuntuを使用しています。私は初心者でも strace グルでもありません。私は何を間違っていますか?IDE の XDebug への接続をより適切にデバッグするにはどうすればよいですか?
設定
- Ubuntu 10.10
- NetBeans 6.9.1
- PHP 5.3.3-1ubuntu9 と Suhosin-Patch
- xdebug.org のカスタマイズされたインストール手順スクリプトを使用して、2010 年 9 月 20 日にソースからビルドされた debugclient を含む Xdebug v2.1.0
- アパッチ アパッチ/2.2.16
- /etc/php5/apache2/php.ini と /etc/php5/cli/php.ini の両方があります:
zend_extension = /usr/lib/php5/20090626+lfs/xdebug.so xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_log=/var/log/xdebug.log xdebug.extended_info=1 xdebug.idekey="netbeans-xdebug"
手順
問題
問題の原因や問題がいつ発生するかを説明できません。これは、プロジェクトをデバッグしようとしたときに始まります。これにより、選択した開発ブラウザー (Chrome) が、パラメーターを使用してプロジェクトの URL を開きますXDEBUG_SESSION_START=netbeans-xdebug
。これにより、ページはクロムで正常にレンダリングされますが、Netbeans は「接続待ち」のみを報告します。
XDebug のデバッグ
まず、「Waiting to Connect」メッセージがまだ有効な状態で、netstat を使用してポート 9000 を調べてみます。これは次のようになります。
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
IDE をシャットダウンし、何が起こっているのかを把握するために 2 つのファイルを使用しよう{webroot}/index.php
と<?php phpinfo(); ?>
しまし{webroot}/dbgtest.php
た。
<?php
$address = '127.0.0.1';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Unable to bind');
socket_listen($sock);
$client = socket_accept($sock);
echo "connection established: $client";
socket_close($client);
socket_close($sock);
?>
XDebug を起動してdebugclient
開くと、通常は通常の出力http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession
が得られ、XDebug が別のターミナルで netstat を使用してスクリプトに接続されていることを確認します。
$ netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 127.0.0.1:34831 ESTABLISHED
tcp 0 0 127.0.0.1:34831 127.0.0.1:9000 ESTABLISHED
これらはどちらも接続が確立されたことを示しているように見えますが、Web ページには「バインドできません」と表示されますが、これについては説明できません。Ctrl-c を押して debugclient を終了すると、この時点で netstat がポート 9000 にアクティビティがないことを確認します。Netbeans を起動し{webroot}/index.php
、デバッガーを開いて起動しhttp://127.0.0.1/index.php
ます。通常、デバッガは正常に起動します。デバッガーを停止し、プロジェクトに戻ると、ここで問題が本当に厄介になります。通常どおりプロジェクトのデバッグを続行できる場合もあれば、問題が再発し、「待機中」の場合もあります。 Connect」サインが表示され、netstat が表示されます。
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
tcp6 0 0 127.0.0.1:9000 127.0.0.1:34681 TIME_WAIT
また、コンピューターを再起動し、ターミナルを起動して、次のことを見つけます。
$ netstat -an | grep 9000
unix 3 [ ] STREAM CONNECTED 9000
$ telnet 127.0.0.1 9000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
私はネットワークと Linux の内部構造に詳しくなく、これが何を指しているのかを理解できません。明らかに何かがポート 9000 を使用しています。これはどういう意味ですか? php.ini での設定にもかかわらず、次の点に注意してください。
$ cat /var/log/xdebug.log
cat: /var/log/xdebug.log: No such file or directory