根据外部请求在Netbeans中启动XDebug

时间:2009-10-07 12:40:40

标签: php linux netbeans xdebug netbeans6.7

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

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

即,不是单击“Debug”,而是将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.com重定向到localhost

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

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

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

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

4 个答案:

答案 0 :(得分:45)

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

(*)你可能还需要设置一个路径映射 - 对我来说,没有

答案 1 :(得分:19)

默认情况下,当未指定“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"

答案 2 :(得分:2)

升级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

我还将netbeans-xdebug中的默认xdebug.idekey重命名为default,然后再重新命名。

重新启动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运行。

答案 3 :(得分:0)

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

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