首页 > 解决方案 > Xdebug + IntelliJ:调试器总是在真实设置断点后面一行

问题描述

在我的 Symfony 应用程序中,我使用 IntelliJ Ultimate + Xdebug + Vagrant VM 和 IntelliJ 中的远程调试设置。在 Vagrant 框中安装了 PHP 7.2 和 Xdebug 2.6

当我通过浏览器启动调试会话时,一切正常。我可以完美地遍历我的所有代码。

但是当我通过

 XDEBUG_CONFIG="remote_host=10.10.0.1" PHP_IDE_CONFIG="serverName=abc" bin/console <command>

Xdebug 也可以工作,但它错过了我本地源代码中的行。在 IntelliJ 中,我总是像调试器一样领先一行。例如,当在我的本地源代码中创建一个新变量时,我可以看到它。仅仅一步之后,调试器信息向我显示它已创建。另一个例子:如果我跨过代码行,我会突然进入一个空行。

如果我设置断点如下

  $a = "abc";
o echo $a;

  echo "test";

调试器停止,但$a尚未初始化(如变量部分所示)。如果我现在跨过

  $a = "abc";
  echo $a;
o
  echo "test";

$a现在已初始化,但未由echo命令输出,并且调试器位于空行上。

下一步会导致

  $a = "abc";
  echo $a;

  echo "test";
o

等等 ...

我能找到的唯一提示是:检查路径映射。我敢肯定,路径映射确实没问题,因为它实际上找到了我要调试的所有文件,但它停在错误的行上。

我还比较了我的 vagrant 源代码和本地源代码中的文件。它们完全相同。我认为它们不能不同步,因为源代码是通过共享文件夹与 VM 共享的。

我还查看了 Xdebug 日志文件,它告诉我行号。这些行号与我的本地代码中的完全相同,所以这里没有什么不寻常的。

奇怪的是:bin/consolephp 文件工作正常,但从这里实例化的类却没有。

有人有线索吗,我还能检查什么?是否有已知的错误或其他任何东西?die()它无法通过和命令调试我所有的命令行执行代码print()...

标签: phpintellij-ideavagrantphpstormxdebug

解决方案


推荐阅读