PhpStorm + Xdebug:已建立连接,PhpStorm中没有调试窗口弹出

时间:2019-03-14 02:13:38

标签: vagrant phpstorm xdebug

我正在努力让PhpStorm和Xdebug在特定的Vagrant VM上正常播放。

如何有效跟踪并解决为此虚拟机连接PhpStorm和Xdebug的问题?

虽然我可以看到PhpStorm和Xdebug在某种程度上进行通信,但Xdebug的连接无法启动PhpStorm的调试窗口,并且无法使用PhpStorm的调试功能。

有问题的工具组合为:

  • 带有Ubuntu 16-04的无用VM
  • 带有php-xdebug 2.7的PHP 7.1
  • PhpStorm 2018.2.1
  • Firefox Xdebug Helper扩展
  • Drupal 8.6.10
  • 将断点插入index.php的第16行。

我能够使这个Vagrant VM连接到Atom的php-debug Xdebug集成。我还可以使PhpStorm连接到其他Vagrant实例的Xdebug!

有关服务器的Xdebug配置:

# xdebug.idekey = "PHPSTORM"
# xdebug.remote_connect_back = on
xdebug.remote_autostart = off
# xdebug.remote_connect_back = on
xdebug.remote_enable = on
xdebug.remote_handler=dbgp
xdebug.remote_host = 10.0.2.2 # IP of the host system
xdebug.remote_log="/tmp/xdebug.log"
xdebug.remote_mode=req
xdebug.remote_port=9000

使用此配置时,我在日志文件/tmp/xdebug.log中看到输出。

  • 将Xdebug Helper设置为“禁用”时,页面将加载到浏览器中。没有日志条目记录到/tmp/xdebug.log
  • 将PhpStorm设置为“停止侦听PHP调试连接”后,该页面将加载到浏览器中。没有日志条目记录到/tmp/xdebug.log
  • 将Xdebug Helper设置为“ Debug”,将PhpStorm设置为“开始侦听PHP调试连接”后,页面将被暂停,就好像可以识别断点一样。但是,PhpStorm不会打开调试窗口,因此无法进行调试。以下记录到/tmp/xdebug.log
[8264] Log opened at 2019-03-14 01:39:02
[8264] I: Connecting to configured address/port: 10.0.2.2:9000.
[8264] I: Connected to client. :-)
[8264] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/html/drupal/web/index.php" language="PHP" xdebug:language_version="7.1.26-1+ubuntu16.04.1+deb.sury.org+1" protocol_version="1.0" appid="8264" idekey="PHPSTORM"><engine version="2.7.0"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2019 by Derick Rethans]]></copyright></init>
[8264]
[8264] <- feature_set -i 1 -n show_hidden -v 1
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="show_hidden" success="1"></response>
[8264]
[8264] <- feature_set -i 2 -n max_depth -v 1
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
[8264]
[8264] <- feature_set -i 3 -n max_children -v 100
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
[8264]
[8264] <- feature_set -i 4 -n extended_properties -v 1
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="4" feature="extended_properties" success="1"></response>
[8264]
[8264] <- feature_set -i 5 -n notify_ok -v 1
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="5" feature="notify_ok" success="1"></response>
[8264]
[8264] <- stdout -i 6 -c 1
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stdout" transaction_id="6" success="1"></response>
[8264]
[8264] <- status -i 7
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="status" transaction_id="7" status="starting" reason="ok"></response>
[8264]
[8264] <- step_into -i 8
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="8" status="break" reason="ok"><xdebug:message filename="file:///var/www/html/drupal/web/index.php" lineno="14"></xdebug:message></response>
[8264]
[8264] <- eval -i 9 -- aXNzZXQoJF9TRVJWRVJbJ1BIUF9JREVfQ09ORklHJ10p
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="eval" transaction_id="9"><property type="bool"><![CDATA[0]]></property></response>
[8264]
[8264] <- eval -i 10 -- aXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10p
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="eval" transaction_id="10"><property type="bool"><![CDATA[1]]></property></response>
[8264]
[8264] <- eval -i 11 -- KHN0cmluZykoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10p
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="eval" transaction_id="11"><property type="string" size="9" encoding="base64"><![CDATA[bG9jYWxob3N0]]></property></response>
[8264]
[8264] <- eval -i 12 -- KHN0cmluZykoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10p
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="eval" transaction_id="12"><property type="string" size="4" encoding="base64"><![CDATA[ODAwMA==]]></property></response>
[8264]
[8264] <- eval -i 13 -- KHN0cmluZykoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10p
[8264] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="eval" transaction_id="13"><property type="string" size="1" encoding="base64"><![CDATA[Lw==]]></property></response>
[8264]

如果我然后单击“停止侦听PHP调试连接”,则会立即看到以下内容记录到/tmp/xdebug.log

[8264] <- run -i 14

然后紧随其后的是this logged output(对于这个问题来说太大了),页面和资源按以前的方式加载。

如何有效地跟踪并解决针对该VM连接PhpStorm和Xdebug的问题?

PhpStorm>语言> PHP:

PhpStorm > Languages > PHP

PhpStorm>语言> PHP>调试: PhpStorm > Languages > PHP > Debug

2 个答案:

答案 0 :(得分:4)

您正在将PhpStorm 2018.2.x与Xdebug 2.7一起使用。

将PhpStorm升级到最新的稳定版2018.3.x或将Xdebug降级到2.6.x

问题出在Xdebug 2.7(https而不是http)上,最近在Xdebug协议中更改了XML名称空间。自PhpStorm 2018.3.0起已修复/受支持(请参见WI-43622)。

答案 1 :(得分:1)

您是否尝试取消对# xdebug.remote_connect_back = on的注释?

我们发现,在PhpStorm和XDEBUG之间始终需要它。也许更好:

xdebug.remote_connect_back=1

我们在上面使用了我们的Vagrant解决方案WPLib Box,它是专门为使PhpStorm简化XDEBUG而构建的。

我会在链接中向您显示,但该回购是私人的。但是,我们最近在Vagrant中切换到了Docker,并且我们的Docker仓库是公共操作系统,这里是our xdebug.ini file,用于我们的PHP 7.2.6 Docker容器。

希望这有助于解决您的问题。