等待连接(netbeans xdebug)MAMP OS X


Waiting For Connection (netbeans-xdebug) MAMP OS X

前导

几个小时后,我一直无法让NetBeans连接到xdebug。几个月前,在从旧版本的MAMP升级到MAMP PRO后,调试工作完美无瑕。一周前它开始变得古怪。它看起来是连接的,但不会在断点处停止。重新启动NetBeans(v7.0.1(和apache有时会让它在短时间内工作。

我真的需要修复它,所以我安装了最新版本的MAMP PRO(2.1.2(。现在我永远收到等待连接的消息。

我做过的测试

当"等待连接"消息与移动的条一起出现时,我想看看它是否在听。是…

# lsof -i -n -P |grep 9001
java  6496  tim  230u  IPv6 0xffffff80239d8190      0t0    TCP *:9001 (LISTEN)

在NetBeans php配置中,我将解释器设置为:/应用程序/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命令显示NetBeans在ipV6上监听。强制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

如果它输出类似"connection established:Resource id#5"的内容,则xdebug工作正常。然后,我重新安装了Java和NetBeans。我告诉NetBeans不要导入我现有的偏好。。。仍然没有连接。

更新2

我安装了适用于Mac的phpStorm IDE。我对它了解了足够多,可以让调试器在我现有的MAMP和xdebug设置中运行。我认为这证实了问题出在NetBeans上。

在这一点上,实现这一点似乎是不可能的(

我问了同样的问题,得到了一个很好的答案:如何在PHP中跟踪每行/行块/方法的执行时间?,除此之外,我还有一个关于目前正在运行的其他具有相同内容的问题的答案。

关于这一点的一些补充说明(我在其他SO帖子中收集的关于这个问题的研究(:

  1. 港口也可能是9001(似乎对一些人有效,而9000则不然(
  2. 切换到PHPStorm IDE是解决这个问题的一个真正的替代方案(因为PHPStorm已经包含了完美运行的xdebug(
  3. 通过向导下载新版本的xdebug(http://xdebug.org/wizard.php)如果你按照指示去做,也许你会很幸运
  4. 关闭防火墙可能会有所帮助
  5. 添加到php.ini:xdebug.idekey=netbeans-xdebug
  6. 找出您是否有一个xdebug.ini文件,并将与xdebug相关的php.ini行添加到该文件中
  7. 您必须取消对zend_extension行的注释(即在其开始时删除;(,因此实际加载了Xdebug
  8. 确保Xdebug已加载,从PHP文件调用phpinfo(((只是为了确定(

Xdebug只有在项目文件夹中有一个index.php文件时才会连接,所以请检查以确保您有一个。

它现在对我有效。我安装了LAMP。我根据上面的所有答案进行了修改,很快就开始了,现在它飞了。。。我很高兴。。。有一段时间我想切换到phpstorm,但我重新考虑了。。。再调整一点。。。等等。它起作用了。

以下是我在php.ini 中的内容

zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.max_nesting_level = 250
xdebug.auto_trace=On
xdebug.remote_enable=On
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_log="/var/log/xdebug.log"
xdebug.trace_output_dir=/var/www/AMRO
xdebug.idekey="netbeans-xdebug"

在干净下载和安装在xampp上工作的netbeans时,xdebug可以工作,但不会在断点处停止。将php.ini更改为:xdebug.remote_enable=1(从0(,xdebug按预期工作!