多くの場合と同様に、XDebugを使用してプログラムをデバッグするよりも、IDEのXDebugへの接続のデバッグに多くの時間を費やしました。 繰り返し動作するようになりましたが、よくある 「接続待ち」の問題が発生します 。 XDebugが機能または失敗する原因を特定できませんでした。私はubuntuを2年間使用しています。私は初心者でもstraceの第一人者でもありません。 私は何が間違っているのですか? IDEのXDebugへの接続をより適切にデバッグするにはどうすればよいですか?
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)がパラメーター_XDEBUG_SESSION_START=netbeans-xdebug
_を使用してプロジェクトのURLを開きます。これにより、ページはchromeで正常にレンダリングされますが、Netbeansは「接続を待機しています」のみを報告します。
まず、「Waiting to Connect」メッセージがまだ表示されている状態で、netstatを使用してポート9000を掘り下げてみます。 何かのようなもの この:
_$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
_
IDEをシャットダウンし、2つのファイルを使用して、何が起こっているのかを理解しようとしました。_{webroot}/index.php
_には<?php phpinfo(); ?>
が含まれ、_{webroot}/dbgtest.php
_には XDebugインストールチェックスクリプト :
_<?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
_が開きます。その後、デバッガーは通常正常に起動します。デバッガーを停止してプロジェクトに戻ります。ここで問題が本当に厄介になります。プロジェクトのデバッグを通常どおり続行できる場合もあれば、問題が再発する場合もあります。 「接続」記号が表示され、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
_
たまたまCiscoVPNクライアントを使用している場合は、これが原因である可能性があります。クライアントが起動していなくても常にオンになっているファイアウォールが付属しています。 [オプション]メニューでオフにすることができます。
このスレッドを読んでください。
http://forums.netbeans.org/post-99369.html
最終的に回避策は、net.ipv6.bindv6only = 0をファイル/etc/sysctl.d/bindv6only.confに追加してから再起動することでした。その後、Xdebugは正常に機能しました。
ええと、私の開発設定はあなたのものとは多少異なりますが、私はこの問題をよく知っています。実際、私はそれを解決しました...今回は、FireeallがXDebugがIDEとの通信に使用するポートをブロックしました。
あなたのアカウントを読んでいるときに、いくつかのことが頭に浮かびます。
1)「問題の原因を説明できない、または問題が発生した場合。」これは非常に重要なステートメントです。ご存知のとおり、技術的な解決策は、根本的な問題が常にまたは時々、一見ランダムな方法で発生するかどうかに厳密に依存しています。それで...あなたは時々この方法でXDebuggingを実行できますか、それとも決して実行できませんか?
2)IDEが待機していて、ブラウザがサイトをすぐにレンダリングする場合、IDE XDebugサーバーに開始するように指示することに問題があると思います.B/c XDebugが起動し、XDebugクライアントに接続できなかった場合、Webサイトはすぐにはレンダリングされません。ただし、この場合、GETパラメータは無視されます。b/ cは意味がありません。 Apache/PHPサーバーは、開始したいXDebugセッションについて何も知らないためです。
3)あなたの解決策のアプローチは私には非常に複雑に思えます。最初はできるだけシンプルにして、それがどのように機能するかを確認します。たとえば、「xdebug.idekey = "netbeans-xdebug」は通常、最初のセットアップには必要ありません。
それらは私の2セントです
最高のラファエル