我正在使用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根本不会看到外部请求。
答案 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正在监听,那么这应该启动一个新的调试会话。