Eclipse 和 NetBeans PHP Xdebug 会话从未完成

Eclipse and NetBeans PHP Xdebug session never completes

我正在使用带有 PHP 7.1 的 UniServer Zero XIII。从 phpinfo.php 文件中,我可以看到启用了 xdebug:

当我尝试调试源代码并在 NetBeans 上使用断点时,XDebug 会话从未完成:

当我从 Web 浏览器查看 Web 应用程序的执行时,它一直在尝试加载页面,但从未完成。

我在 Eclipse 上也有同样的经历:

我想了解为什么 Xdebug 会话从未完成,以及我需要做什么来修复它。谢谢。

我想也许找到了解决方案,问题是您删除了元数据:

当项目(包括源代码根目录)被删除或移出 NetBeans 时,当 NetBeans 关闭时,再次启动 NetBeans 后,属于不再存在的源代码的行断点将被删除。

因此,恕我直言,在您的情况下,要么抛出了一些异常,这中断了断点消除并且将在您的 messages.log 文件中,要么您只删除了没有源代码的项目元数据。

这是我能够重现您的问题的唯一情况:

1) 创建一个 Servlet2Stateless 示例项目(或任何 Java 项目都可以 这样恕我直言)

2) 右键单击​​项目 window 中的项目并 select 复制...

3) 按复制按钮

4) 从复制的项目中打开 Servlet2Stateless.java 文件 (Servlet2Stateless_1)

5) 提交断点到第72行

6) 调试 Servlet2Stateless_1 项目,挂起后 断点,按继续并完成调试器会话。

7) 删除​​你的 proyect_1 项目,但一定不要检查 "Also delete sources under..."

8)调试原项目

9) 您收到错误消息 "无法提交断点 LineBreakpoint Servlet2Stateless.java:72, 原因:找不到 URL 的源根目录 '文件:/tmp/NetBeansProjects/ServletStateless_1/src/java/servlet/stateless/ Servlet2Stateless.java'。验证项目源的设置。"

10) 这个消息是无害的,但是如果你想摆脱它,很容易 单击 "Invalid LineBreakpoint Servlet2Stateless.java : 72" 行, 打开源文件并删除断点。

由于这个问题没有什么严重的,我将优先级降低到 P3。 我们可以考虑通过忽略属于没有相应项目的源根目录的断点来解决此问题,并且不将其作为额外的源根目录添加到 Sources window.

查看全部信息here

我运行没时间去找这个问题的解决办法。不幸的是,我只收到了这个问题的一个答案,并没有解决我的问题。我必须为 Zend Studio 13.6 购买 Zend Studio Perpetual 许可证,现在我可以使用断点,使用 Zend Debugger(XDebug 的竞争对手)调试我的代码,并且一切正常。

我尽可能多地尝试解决我在 NetBeans 和 Eclipse 上使用 XDebug 时遇到的问题,但是我 运行 没时间了,我需要继续前进。我必须为我的 Zend Studio Perpetual 许可证支付 89 美元,其中包括一年的免费升级。我想通过使用 Eclipse 或 NetBeans 来省钱,但是这个 XDebug 问题迫使我在这种情况下从开源解决方案转向专有解决方案。

2017 年 8 月 29 日编辑:

我终于在 Zend Studio 上使用了 XDebug。我无法在 UniServer Zero XIII 上快速配置 Zend Debugger,因此我对以下文件进行了如下所示的修改:C:[my path]\UniformServer13_3_2_ZeroXIII\UniServerZ\core\php71\php_production.ini:

[xdebug]
#zend_extension=${US_ROOTF}/core/php71/extensions/php_xdebug.dll
zend_extension="C:\[my path]\UniformServer13_3_2_ZeroXIII\UniServerZ\core\php71\extensions\php_xdebug.dll"
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
#xdebug.remote_port=9000
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.idekey=default

我将端口从 9000 更改为 9001,并使用带双引号的绝对路径指向 zend_extension 以指定 php_xdebug.dll 扩展所在的位置。我不确定这最后一步是否有任何不同,或者是否只是将端口从 9000 更改为 9001 然后重新启动 Apache。但至少现在我可以配置断点来停止程序并查看我想要评估的变量值。