等待连接(netbeans-xdebug)MAMP OS X.

时间:2013-03-01 01:23:50

标签: php macos netbeans mamp xdebug

序言

经过几个小时,我无法让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 config中,我将解释器设置为: /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命令显示了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);
?>

从命令行运行它并在网址末尾加载浏览器中的任何页面:

?XDEBUG_SESSION_START=nb

如果它输出类似“建立的连接:资源ID#5”,则xdebug正常工作。有了这个,我重新安装了Java和NetBeans。我告诉NetBeans不要导入我现有的首选项......仍然没有连接。

UPDATE2

我安装了适用于Mac的phpStorm IDE。我学到了足够的知识,可以使用我现有的MAMP和xdebug设置来运行调试器。我认为这证实了NetBeans的问题。

此时,让这项工作似乎不可能。 :(

4 个答案:

答案 0 :(得分:7)

我问了同样的事情并且得到了这个非常好的答案:How to track execution time of each line / block of lines / methods in PHP?,除此之外我还得到了关于当前正在运行的具有相同内容的其他问题的答案。

关于这方面的一些补充说明(我在自己的研究中收集的其他SO帖子中有这个问题):

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

答案 1 :(得分:5)

如果项目文件夹中有index.php文件,Xdebug只会连接,所以请检查以确保你有一个。

答案 2 :(得分:1)

现在对我有用。我安装了LAMP。我根据上面的所有答案进行了修改,启动了apache2,现在它过得很快......我很高兴...有一段时间我想切换到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"

答案 3 :(得分:0)

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