Xdebug 停止工作并且无法在断点处停止
Posted
技术标签:
【中文标题】Xdebug 停止工作并且无法在断点处停止【英文标题】:Xdebug stop working and couldn't stops at breakpoints 【发布时间】:2019-10-11 06:29:24 【问题描述】:昨天调试器无故停止工作。我使用 phpStorm IDE 进行调试。我在页面的开头放置了断点,它并没有停止。
我尝试使用相同的 PHP 版本调试控制台脚本,它工作正常 - 调试在断点处停止。我在 Apache 服务器上更改了 php 版本并尝试在另一个项目上进行 degguning - 它工作正常,在断点处停止调试。
PHP版本 5.6.40-12+ubuntu18.04.1+deb.sury.org+1
/etc/php/5.6/apache2/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.scream=0
xdebug.show_local_vars=1
xdebug.idekey=PHPSTORM
xdebug.remote_enable=1
xdebug.remote_log='/val/log/xdebug.log'
PhpStorm 2019.2.3 构建 #PS-192.6817.20,于 2019 年 9 月 25 日构建 运行时版本:11.0.4+10-b304.69 amd64 虚拟机:JetBrains s.r.o 的 OpenJDK 64 位服务器虚拟机 Linux 5.0.0-27-通用
调试开始时,PhpStorm 日志有警告。也许这会有所帮助:
2019-10-07 15:51:33,188 [25325256] WARN - il.connection.ServerConnection - input stream is finished
java.io.IOException: input stream is finished
at com.jetbrains.php.debug.xdebug.dbgp.DbgpUtil.readDocument(DbgpUtil.java:115)
at com.jetbrains.php.debug.xdebug.dbgp.DbgpUtil.readMessage(DbgpUtil.java:283)
at com.jetbrains.php.debug.xdebug.connection.XdebugConnection$MyInputReader.read(XdebugConnection.java:135)
at com.jetbrains.php.debug.xdebug.connection.XdebugConnection$MyInputReader.read(XdebugConnection.java:124)
at com.jetbrains.php.debug.xdebug.connection.XdebugConnection.init(XdebugConnection.java:47)
at com.jetbrains.php.debug.connection.PhpDebugServer.handle(PhpDebugServer.java:51)
at com.jetbrains.php.debug.connection.PhpDebugServer.handle(PhpDebugServer.java:34)
at com.jetbrains.php.util.connection.ServerConnection.lambda$null$0(ServerConnection.java:64)
at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:294)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
如何解决问题,如何强制 xdebug 在断点处停止?
【问题讨论】:
您介意提供有关 phpinfo xdebug 部分的更多详细信息吗?下部,其中显示xdebug.remote_port
、xdebug.remote_enable
等值。那么环境呢:你是在 vagrant、docker 还是本地运行你的 php 站点?
@Yerke,添加了屏幕。站点留在本地,使用 apache2 运行
【参考方案1】:
从错误消息中我可以看到调试会话确实有效。 PhpStorm 似乎中止了连接。
Xdebug 可能正在发送 PhpStorm 无法理解的 XML(即,它是无效的)。我怀疑这是由于属性名称或数组键名称中的空字符造成的。 (请随意将完整日志发布到 pastebin,我很乐意查看并修改答案)。
您已经在创建一个远程日志文件,因此请查看其中的最后几行,就在您的调试会话中止之后。
您可以通过将 Xdebug 升级到受支持的版本(目前为 2.7.2)来解决此问题。
【讨论】:
这里是日志:pastebin.com/rF3ZgbeV。它只是重复了日志消息。我已经尝试在较旧的 PhpStorm 版本 2019.2 上开始调试 - 结果相同。而且我无法升级 Xdebug,因为我使用的是 php5.6,但最后支持的版本是 2.5.5(我试图在 20-xdebug.ini 文件中将 xdebug 更改为不同的 - 它停止工作。 我想查看 Xdebug 的远程日志文件,而不是 PhpStorm 的。但如果我的预感是正确的,您确实需要更新 Xdebug 才能开始工作,这也意味着升级 PHP。 PHP 5.6 已经停产将近 3 年了。 Xdebug 没有记录任何提及日志文件的内容。而且升级php版本不是解决办法,我们的项目只在上面工作。 不知道我能说什么。这已在较新的 Xdebug 版本中得到修复。 所以,据我所知,解决问题的唯一方法是将项目升级到较新的 PHP,不是 @Derick 吗?以上是关于Xdebug 停止工作并且无法在断点处停止的主要内容,如果未能解决你的问题,请参考以下文章
VSCode 中的 Xdebug 不会在命令行的 Laravel artisan 命令的断点处停止
Xdebug 即使在记录中断时也不会在断点处停止,而是说它已连接到客户端
Qt 调试崩溃/退出 python 并最终无法正确调试(例如,不在断点处停止)