38

我正在使用 Netbeans 6.7 和 XDebug 在我的机器上调试 PHP 站点,从 Netbeans (Project->Debug) 中启动请求。这工作正常,非常有用。

我的问题是:是否可以将调试器附加到任何传入的请求,而不仅仅是我从 Netbeans 中启动的请求?

即,不是单击“调试”,而是将 Netbeans 置于启动调试器并附加到下一个传入请求的模式。

我觉得这可能是一个愚蠢的问题,但如果可能的话,那就太好了。

编辑:更多信息

我的系统(Ubuntu 9.04)设置如下:

的内容/etc/php5/conf.d/xdebug.ini

zend_extension=/usr/lib/php5/20060613/xdebug.so

xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug

Netbeans PHP 调试选项默认为:

Debugger Port: 9000
Session ID: netbeans-xdebug
Stop at the First Line: ticked

我的/etc/hosts文件重定向www.mywebsite.comlocalhost

如果我单击 Netbeans 中的调试按钮,则会使用地址启动 Firefox http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug,并且调试器按预期工作。

但是如果我只是浏览到http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug,这不会启动 Netbeans 中的调试器。

我也尝试过设置xdebug.remote_host=www.mywebsite.com,但这没有什么区别。

另外,我启用xdebug.remote_log了 ,这显示了我从 netbeans 开始时的信息,但没有显示外部请求。所以我认为 XDebug 根本看不到外部请求。

4

4 回答 4

48

转到项目属性>运行配置>高级>调试 url并检查不要打开 Web 浏览器(*)。不要在调试器代理设置主机。保存这些设置。在项目窗口中,在您的项目上:鼠标右键单击>调试(这将开始侦听调试连接)。没有启动浏览器。在浏览器中输入。它应该在netbeans中中断。至少这就是这里发生的事情:)http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug

(*) 你可能还需要设置一个路径映射——对我来说,它不需要

于 2009-10-09T16:15:09.630 回答
23

默认情况下,当未指定 'XDEBUG_SESSION_START' Cookie/URL 参数时,xdebug 不会尝试连接到远程主机。您可以通过将 php.ini 中的 xdebug.remote_autostart 设置为 1 来启用 xdebug 为“始终开启”。

此外,您必须在 NetBeans 中启动 PHP 调试器才能使其工作。我还没有找到更好的解决方案,但是您可以让 PHP 调试器通过开始调试随机文件(使用 CTRL+SHIFT+F5 开始调试文件)然后继续(按 F5)来监听传入连接它停在断点处。Netbeans 调试器应该一直运行,直到您真正停止它为止。

更新:由于 NetBeans 检查会话 ID (XDEBUG_SESSION_START),您也必须设置 idekey 变量。例如:

xdebug.remote_autostart = 1
xdebug.idekey = "netbeans-xdebug"
于 2010-05-17T16:31:14.913 回答
3

在升级 PHP 并编译/安装 xdebug 之后,我遇到了类似的问题(在 NetBeans、Mac OSX 上)。phpinfo 显示 xdebug 已加载,但它仍然无法连接,并且在尝试了上面列出的所有内容后仍然没有成功。然后我尝试将PHP.ini 文件中设置的参数数量减少到所需的最小值。这似乎为我解决了问题。

; REMOVED (commented) the following
; xdebug.remote_log=/myfile.log
;xdebug.extended_info = off
;xdebug.auto_trace=1
;xdebug.trace_output_dir=/mydir/myphptracefile.txt
;xdebug.trace_output_name=php_trace.%c
;xdebug.collect_params=4

我还将默认的 xdebug.idekey 从 netbeans-xdebug 重命名为默认值,然后再返回。

重新启动 Apache 后,xdebug 再次开始工作:我不确定到底是什么修复了它,但一个好的起点可能是从php.ini 文件中的最小数量的 xdebug 设置开始,然后如果需要,慢慢添加更多他们。我怀疑它可能与跟踪设置有关,但不能确定。

我最终使用的基本设置是:

xdebug.remote_enable=on
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug

编译 debugclient(在 xdebug 源包中)也是一个好主意,并在命令行上检查调试,因为这将告诉您 xdebug 是否至少可以独立于您的 IDE 运行。

于 2014-07-18T09:56:42.203 回答
1

不确定 Netbeans,但我使用的任何其他 IDE 总是在监听调试连接。您可以通过将查询字符串附加?XDEBUG_SESSION_START=name到 url 来从 xdebug 启动新的调试会话。如果 Netbeans 正在侦听,那么这应该会启动一个新的调试会话。

有关详细信息,请参阅http://xdebug.org/docs/remote#browser_session

于 2009-10-08T22:04:44.723 回答