我正在使用 Netbeans 6.7 和 XDebug 调试我的计算机上的 PHP 站点,从 Netbeans 中启动请求(项目 -> 调试)。 这很好用,而且非常有用。
我的问题是:是否可以将调试器附加到任何传入的请求,而不仅仅是我从 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.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 根本看不到外部请求。
转到 项目属性 > 运行配置 > 高级 > 调试 url 并选中 不打开 Web 浏览器 (*)。不要在调试器代理下设置主机。保存这些设置。在项目窗口中,在您的项目上: 单击鼠标右键 > debug(这将开始侦听调试连接)。没有浏览器启动。在浏览器中输入http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
。它应该在 netbeans 中崩溃。至少这就是这里发生的事情:)(*)您可能还需要设置
路径映射 - 对我来说,它无需设置
此外,您必须在 NetBeans 中启动 PHP 调试器才能使其工作。我还没有找到更好的解决方案,但是您可以通过开始调试随机文件(使用 CTRL+SHIFT+F5 开始调试文件)然后继续(按 F5)一次,让 PHP 调试器侦听传入连接它停在断点处。 Netbeans 调试器应该一直运行,直到您真正停止它为止。
更新:由于 NetBeans 检查会话 id (XDEBUG_SESSION_START),您也必须设置 idekey 变量。例如:
xdebug.remote_autostart = 1
xdebug.idekey = "netbeans-xdebug"
; 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
重新启动 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 运行。
不确定 Netbeans,但我使用过的任何其他 IDE 始终侦听调试连接。 您可以通过将查询字符串
zend_extension=xdebug
xdebug.mode = debug
xdebug.client_host = 127.0.0.1
xdebug.idekey = netbeans-xdebug
xdebug.start_with_request = yes
客户端主机告诉 xdbug 监听对该主机的所有请求 idekey netbean 将启动会话 start_with_request == url 中不需要 XDEBUG_SESSION_START=netbeans-xdebug。它有效。