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

问题描述 投票:0回答:5

我正在使用 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 根本看不到外部请求。

php linux netbeans xdebug netbeans6.7
5个回答
48
投票

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

。它应该在 netbeans 中崩溃。至少这就是这里发生的事情:)

(*)您可能还需要设置

路径映射 - 对我来说,它无需设置


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

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

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

xdebug.remote_autostart = 1 xdebug.idekey = "netbeans-xdebug"
    

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 运行。
    

不确定 Netbeans,但我使用过的任何其他 IDE 始终侦听调试连接。 您可以通过将查询字符串

1
投票
附加到 url 来从 xdebug 启动新的调试会话。 如果 Netbeans 正在侦听,则应该启动新的调试会话。

请参阅 
http://xdebug.org/docs/remote#browser_session

了解更多详细信息

对于 xdebug 3 及更高版本,这些是 php.ini 设置,它让 netbeans 中的 exdbug 监听所有传入我的代码的请求,只要它的 bean 可用。 url 中包含或不包含 XDEBUG_SESSION_START=netbeans-xdebug。

0
投票
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。
它有效。

© www.soinside.com 2019 - 2024. All rights reserved.