Vagrant,PhpStorm,HHVM和Xdebug

And*_*ndy 6 php xdebug phpstorm vagrant hhvm

我在使用PhpStorm和HHVM中的内部Xdebug在流浪盒上玩得很好时遇到了问题,下面是我的php.ini.

xdebug.enable=1
xdebug.remote_enable=1
xdebug.idekey="PHPSTORM"
xdebug.remote_host="10.0.2.2"
xdebug.remote_autostart=0
xdebug.remote_connect_back=1
Run Code Online (Sandbox Code Playgroud)

PhpStorm正在侦听端口9000,如果我在第一次运行时删除所有远程服务器PhpStorm给了我通常的"来自Xdebug的传入连接".

在我选择正确的映射并且第一个断点被命中后,HHVM似乎在返回504网关超时之前挂起.如果我删除断点然后加载是即时的,那么显然PhpStorm和Xdebug似乎正在通信,但是调试窗口从不显示任何堆栈信息/断点控制.

有没有人有任何指针,我的想法是:1)我需要在Vargrant框上打开一个端口,因为通信挂在某处2)HHVM/PhpStorm中的错误(不太可能)

我在Ubuntu 14.04,Vagrant 1.6.5

使用Nginx + HipHop VM 3.4.1,扩展API:20140829,VM也是14.04

PhpStorm 8.0.2


我现在已经启用了针对Xdebug远程连接的vagrant box的登录,这是输出....

Log opened at[2014-12-18 14:59:16]
I: Checking remote connect back address.
I: Remote address found, connecting to 192.168.56.1:9089.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/public/index.php" language="PHP" protocol_version="1.0" appid="9660" idekey="PHPSTORM"><engine version=""><![CDATA[xdebug]]></engine><author><![CDATA[HHVM]]></author><url><![CDATA[http://hhvm.com/]]></url><copyright><![CDATA[Copyright (c) 2002-2013 by Derick Rethans]]></copyright></init>

<- feature_set -i 1 -n show_hidden -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="show_hidden" success="1"></response>

<- feature_set -i 2 -n max_depth -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>

<- feature_set -i 3 -n max_children -v 100
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>

<- status -i 4
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="4" status="starting" reason="ok"></response>

<- step_into -i 5
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="break" reason="ok" command="step_into" transaction_id="5"><xdebug:message lineno="12" filename="file:///var/www/public/index.php"></xdebug:message></response>

<- breakpoint_set -i 6 -t line -f file:///var/www/public/index.php -n 32
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="6" id="18" state="enabled"></response>
Run Code Online (Sandbox Code Playgroud)

但是,如果我点击PhpStorm中的"添加方法跳过列表"按钮,它会继续与XDebug进行通信,就好像单步执行变量一样,每次点击一次...

<- stack_get -i 8
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stack_get" transaction_id="8"><stack where="{main}" level="0" type="file" filename="file:///var/www/public/index.php" lineno="12"></stack></response>
Run Code Online (Sandbox Code Playgroud)

最终,在这些"stack_get"调用中的几个已经以这种方式匆匆通过后,显示了预期的控件.

有人有什么建议吗?

And*_*ndy 2

该问题现已在 github 上关闭:https ://github.com/facebook/hhvm/issues/4488