【问题标题】:Launch XDebug in Netbeans on an external request根据外部请求在 Netbeans 中启动 XDebug
【发布时间】:2010-12-04 14:55:02
【问题描述】:

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

【问题讨论】:

  • 注意:不是remote_handler r结尾吗?!?
  • @Fronker 是的,我认为你是对的,谢谢。固定。
  • 对我来说,我不知道有三个位置我必须指定端口 = 9000,并且不匹配导致“等待连接(netbeans-xdebug)”:stackoverflow.com/a/41768167/470749

标签: php linux netbeans xdebug netbeans6.7


【解决方案1】:

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

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

【讨论】:

  • 执行上述操作时,如果您不希望它一直停在顶部,请取消选中“停止在第一行”的复选框,例如 index.php 文件也一直停在上面,但只能直接停在子路径到达的特定文件中的断点,例如,'localhost/test' -> TestController.php
  • 如果您使用Starting the Debugger第三步列出的浏览器插件之一,则无需添加“?XDEBUG_SESSION_START=netbeans-xdebug”。只需使用浏览器打开和关闭它。
  • 如果您甚至不想在请求中添加?XDEBUG_SESSION_START=netbeans-xdebug,请转到@Pada 答案
  • @Jaime 对我来说,使用浏览器插件为每个请求添加 XDEBUG_SESSION 参数似乎更容易 - 请参阅上面的 colan 评论。
  • @Jaime xdebug.remote_autostart = 1,/every/ 对 PHP 的请求将尝试连接到 Xdebug,这(至少在我的情况下)通常会导致浏览器/网络服务器停止。
【解决方案2】:

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

【讨论】:

  • 完美!我一生都在想是否有任何方法可以在不需要在 HTTP 请求中添加 ?XDEBUG_SESSION_START=session_name 的情况下进行调试
  • 我从来没有让这个与 Netbeans 一起工作。不过,我可以使用idekey 成功(且仅)进行调试。
【解决方案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 运行。

【讨论】:

    【解决方案4】:

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

    详情请见http://xdebug.org/docs/remote#browser_session

    【讨论】:

    • 谢谢你,但它似乎不起作用 - 就像 Netbeans 可以自己启动调试器,但它不监听外部连接。扩展了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2022-11-04
    • 2011-07-04
    相关资源
    最近更新 更多