前文
何時間も経ちましたが、NetBeansをxdebugに接続することができませんでした。数か月前、古いバージョンのMAMPからMAMP PROにアップグレードした後、デバッグは問題なく機能しました。一週間前、それは薄っぺらになり始めました。接続しているように見えますが、ブレークポイントで停止しません。NetBeans(v7.0.1)とapacheを再起動すると、短時間動作することがありました。
本当に修正が必要だったので、最新バージョンのMAMP PRO(2.1.2)をインストールしました。これで、WaitingForConnectionメッセージが永久に表示されます。
私が行ったテスト
接続待ちのメッセージが移動バーとともに表示されている間、私はそれがリッスンしているかどうかを確認します。それは...
# lsof -i -n -P |grep 9001
java 6496 tim 230u IPv6 0xffffff80239d8190 0t0 TCP *:9001 (LISTEN)
NetBeans php設定では、インタプリタを/Applications/MAMP/bin/php/php5.4.10/bin/phpに設定しています。
以下を実行します。
# /Applications/MAMP/bin/php/php5.4.10/bin/php -i | grep xdebug
xdebugがphpinfo()と同じように実行されていることを教えてくれます
私は(何度も)ポート番号がどこでも同じであることを確認しました。ポート9000と9001を試しました。
xdebug.logでテールを実行してから、NetBeansでデバッグセッションを開始せずにブラウザからセッションを開始すると、次のようになります。
I: Connecting to configured address/port: localhost:9001.
E: Could not connect to client. :-(
接続メッセージを待ってブラウザからセッションを開始すると、ログに次のように表示されます。
: Connecting to configured address/port: localhost:9001.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///Users/tim/MAMPSites/facts.tvd.us/htdocs/sendfile/tim.php" language="PHP" protocol_version="1.0" appid="7279" idekey="netbeans-xdebug"><engine version="2.2.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2012 by Derick Rethans]]></copyright></init>
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
私のphp.iniファイルには次のものがあります。
[xdebug]
zend_extension="/Applications/MAMP/bin/php/php5.3.20/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9001
xdebug.idekey="netbeans-xdebug"
アップデート
上記のlsofコマンドが、ipV6でリッスンしているNetBeansを示していることに気づきました。java(NetBeans)にipV4の使用を強制しても効果はありません。
launchctl setenv JAVA_TOOL_OPTIONS -Djava.net.preferIPv4Stack=true
xdebugが正しく機能していることを確認するためのテストを提案する投稿を見つけました。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);
?>
コマンドラインから実行し、URLの最後に次のようにブラウザの任意のページをロードします。
?XDEBUG_SESSION_START=nb
「接続が確立されました:リソースID#5」のような出力が表示された場合、xdebugは正しく機能しています。それで、JavaとNetBeansを再インストールしました。NetBeansに既存の設定をインポートしないように指示しました...それでも接続がありません。
Update2
Mac用のphpStormIDEをインストールしました。既存のMAMPとxdebugのセットアップでデバッガーを実行するのに十分なことを学びました。これは、問題がNetBeansにあることを確認していると思います。
この時点で、これを機能させることは不可能のようです。:(