9

前言

几个小时后,我无法让 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 配置中,我将解释器设置为:/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);
?>

从命令行运行它并在浏览器中加载任何页面,并在 url 末尾添加以下内容:

?XDEBUG_SESSION_START=nb

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

更新2

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

在这一点上,让这个工作似乎是不可能的。:(

4

4 回答 4

8

我问了同样的问题,得到了很好的答案:如何在 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 行(即;在其开头删除),因此实际上加载了 Xdebug。
  8. 确保加载了 Xdebug,从 PHP 文件调用 phpinfo()(只是为了确定)。
于 2013-07-22T10:26:39.443 回答
5

Xdebug will only connect if there is an index.php file in your project folder, so check to make sure you have one.

于 2013-09-14T14:55:26.473 回答
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"
于 2014-01-06T18:43:32.790 回答
0

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

于 2013-09-04T15:23:32.473 回答