使用 Eclipse 调试 PHP 脚本

Posted

技术标签:

【中文标题】使用 Eclipse 调试 PHP 脚本【英文标题】:Debug PHP scripts using Eclipse 【发布时间】:2010-12-04 01:39:51 【问题描述】:

我使用 Eclipse 3.4.2 和 phpEclipse 和 Zend Debugger 已经有一段时间没有问题了。突然,我无法调试 PHP 脚本。我可以很好地运行它们,但是当我选择 Debug As... 时,脚本会在调试窗口中显示,就好像它正在运行一样,但事实并非如此。如果我点击暂停,它会报告在第 0 行。我可以单步执行它,如果我继续,让它坐下然后再次暂停,它仍然报告在第 0 行。

我试过关闭所有东西,重新启动我的系统,并创建一个新项目,但没有运气。

我最近更新了 Ubuntu 系统,但没有任何与 PHP 或 Eclipse 相关的内容(我可以说)。 XULRunner 已更新。

我检查了调试配置,它选择了 Zend 调试器和 PHP 可执行文件,就像它们之前工作时一样。我已经玩过编辑源查找以确保它在正确的位置。

有什么想法吗?

编辑:eclipse 的调试器正在监听端口 10000 我可以 telnet localhost 10000 很好。当我发送一些垃圾字符时,eclipse 会弹出一条关于调试器不兼容的错误消息,所以它似乎正在监听

编辑:我无法弄清楚到底发生了什么,但创建一个新工作区似乎可以解决问题

更新:我尝试了 eclipse -clean (我在 ubuntu 上),但这对我没有帮助。我找到了 .log 文件并注意到以下错误。启动时:

!ENTRY org.eclipse.osgi 2 1 2009-10-05 17:02:11.979
!MESSAGE NLS missing message: DebugConnectionThread_oldDebuggerVersion in: org.eclipse.php.internal.debug.core.PHPDebugCoreMessages

!ENTRY org.eclipse.osgi 2 1 2009-10-05 17:02:11.980
!MESSAGE NLS missing message: DebugServerTestEvent_success in: org.eclipse.php.internal.debug.core.PHPDebugCoreMessages

!ENTRY org.eclipse.osgi 2 1 2009-10-05 17:02:11.980
!MESSAGE NLS missing message: DebugServerTestEvent_timeOutMessage in: org.eclipse.php.internal.debug.core.PHPDebugCoreMessages

在我尝试启动调试会话后:

!ENTRY org.eclipse.php.debug.core 4 10001 2009-10-05 17:02:23.455
!MESSAGE Can't determine version of the PHP executable

!ENTRY org.eclipse.php.debug.core 4 10001 2009-10-05 17:02:23.983
!MESSAGE PHPDebug plugin internal error
!STACK 0
java.lang.NullPointerException
    at org.eclipse.php.internal.debug.core.preferences.stepFilters.DebugStepFilterController.isFiltered(DebugStepFilterController.java:98)
    at org.eclipse.php.internal.debug.core.zend.debugger.handlers.ReadyNotificationHandler.handle(ReadyNotificationHandler.java:34)
    at org.eclipse.php.internal.debug.core.zend.communication.DebugConnectionThread$InputMessageHandler.run(DebugConnectionThread.java:881)
    at java.lang.Thread.run(Thread.java:636)

鉴于此,我正在尝试查看是否可以找到其他任何东西。

【问题讨论】:

【参考方案1】:

您提到您无法弄清楚发生了什么,但创建一个新工作区似乎可以解决问题。该案例可能只是 Eclipse 的一个众所周知的问题。基本上,随着时间的推移,系统中会积聚垃圾。当这种情况发生时,Eclipse(尤其是插件)开始崩溃。您可以在启动 Eclipse 时使用 -clean 参数解决此问题(无需创建新工作区)。

因此,如果您运行的是 Windows,请编辑指向 Eclipse 的快捷方式,以便您看到:

eclipse.exe -clean

这应该会有所帮助。在此处阅读有关它的更多信息:Keeping Eclipse Running Clean

【讨论】:

【参考方案2】:

关于 Eclipse 的一个真正好处是它没有安装程序,尽管我看到某条路上的一些好心的旅行者让你可以做到apt-get eclipse。 (提示:不要那样做。)

其中一件不太好的事情是它相当复杂。如果您认为您可能已经翻转了它拥有的数千个开关中的一个,只需解压缩存档并进行并行安装。 Eclipse 在这种情况下表现良好,即使在 Windows 上也是如此。如果并行安装有效,那么至少您知道它只是您的工作区或配置,如果没有,您知道从外部查看。 (错误,除非您在运行配置中犯了两次同样的错误。)

【讨论】:

【参考方案3】:

您的防火墙是否进行了任何更改?我使用 NuSphere 的 php 调试器,它通过 TCP 套接字进行通信。如果您的防火墙在更新期间被修改,您的防火墙可能会阻止调试器服务器通过它(可能)运行的 localhost 端口联系您的调试器客户端。不太确定 Eclipse 的调试器是如何工作的,但我猜也是这样。

为了好玩,您可以尝试运行 snort 以查看调试器是否正在向您发送数据包。

【讨论】:

以上是关于使用 Eclipse 调试 PHP 脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse PDT 中使用 xdebug 和 cakephp 进行调试

Eclipse开发工具

将 XDebug 与 Eclipse PDT 和 XAMPP 一起使用

使用 Eclipse 创建和调试 PHP 代码

eclips如何安装jetty插件

从根目录在eclipse中运行脚本