2017-06-01 135 views
1

问题如何在远程调试Symfony的控制台命令

我想远程VM服务器上调试Symfony的控制台命令。我可以让它工作来调试bin/console脚本和\Symfony\Bundle\FrameworkBundle\Console\Application中的所有相关方法调用,但只要它调用特定命令的执行方法(在symfony/symfony/src/Symfony/Component/Console/Command/Command.php:256中),调试器映射就会失去映射并且不再工作。我不能在任何我设定在特定命令的断点处使其中断。

设置

在VM我有以下的PHP设置:

# /etc/php5/cli/php.ini 
[xdebug] 
zend_extension=/usr/lib/php5/20131226/xdebug.so 

xdebug.remote_enable=on 
xdebug.remote_port=9000 
xdebug.idekey=PHPSTORM 
xdebug.remote_autostart=on 
xdebug.remote_connect_back=on 

开始我创建

ssh -nNT -R 9000:localhost:9000 [email protected] 

一个SSH隧道PhpStorm我有调试会话之前使用SFTP配置部署,并将PHP CLI解释器设置为远程php cli版本。

我激活“开始侦听PHP调试连接”。连接被做了第一次,创建服务器调试连接,我加了映射项目的根目录:

PHP Server Config

在我的本地计算机的IP 192.168.56.57被映射到域sa-platform.dev-vm/etc/hosts

当我在VM bin/console sa:events:group上调用我的命令时,我在相关控制台脚本的第一行停止了PhpStorm中的连接。

debug connection breaking at first line of console script

而且我可以调试,直到在我的命令的执行函数调用点:

debug console application until command execute function is called

但在那之后没有机会调试我的命令。

我已经尝试将PhpStorm中的PHP服务器映射直接设置为无法使用的命令文件。

任何帮助表示赞赏。

更新: 建议我已经添加了日志文件并在PhpStorm中将accept外部调试连接设置为5。

我对日志没有任何线索,但也许有人呢?

The complete log of one session can be found here。最后一个项目是这样的:

<- context_get -i 23 -d 0 -c 1 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="context_get" transaction_id="23" context="1"><property name="$_COOKIE" fullname="$_COOKIE" type="array" children="0" numchildren="0" page="0" pagesize="100"></property><property name="$_ENV" fullname="$_ENV" type="array" children="0" numchildren="0" page="0" pagesize="100"></property><property name="$_FILES" fullname="$_FILES" type="array" children="0" numchildren="0" page="0" pagesize="100"></property><property name="$_GET" fullname="$_GET" type="array" children="0" numchildren="0" page="0" pagesize="100"></property><property name="$_POST" fullname="$_POST" type="array" children="0" numchildren="0" page="0" pagesize="100"></property><property name="$_REQUEST" fullname="$_REQUEST" type="array" children="0" numchildren="0" page="0" pagesize="100"></property><property name="$_SERVER" fullname="$_SERVER" type="array" children="1" numchildren="27" page="0" pagesize="100"><property name="COMP_WORDBREAKS" fullname="$_SERVER[&#39;COMP_WORDBREAKS&#39;]" type="string" size="12" encoding="base64"><![CDATA[IAkKIic+PDt8Jig6]]></property><property name="TERM" fullname="$_SERVER[&#39;TERM&#39;]" type="string" size="14" encoding="base64"><![CDATA[eHRlcm0tMjU2Y29sb3I=]]></property><property name="SHELL" fullname="$_SERVER[&#39;SHELL&#39;]" type="string" size="9" encoding="base64"><![CDATA[L2Jpbi9iYXNo]]></property><property name="SSH_CLIENT" fullname="$_SERVER[&#39;SSH_CLIENT&#39;]" type="string" size="21" encoding="base64"><![CDATA[MTkyLjE2OC41Ni4xIDUxODQ2IDIy]]></property><property name="OLDPWD" fullname="$_SERVER[&#39;OLDPWD&#39;]" type="string" size="11" encoding="base64"><![CDATA[L2hvbWUvam9lcmc=]]></property><property name="SSH_TTY" fullname="$_SERVER[&#39;SSH_TTY&#39;]" type="string" size="10" encoding="base64"><![CDATA[L2Rldi9wdHMvMA==]]></property><property name="USER" fullname="$_SERVER[&#39;USER&#39;]" type="string" size="5" encoding="base64"><![CDATA[am9lcmc=]]></property><property name="LS_COLORS" fullname="$_SERVER[&#39;LS_COLORS&#39;]" type="string" size="1422" encoding="base64"><![CDATA[cnM9MDpkaT0wMTszNDpsbj0wMTszNjptaD0wMDpwaT00MDszMzpzbz0wMTszNTpkbz0wMTszNTpiZD00MDszMzswMTpjZD00MDszMzswMTpvcj00MDszMTswMTpzdT0zNzs0MTpzZz0zMDs0MzpjYT0zMDs0MTp0dz0zMDs0Mjpvdz0zNDs0MjpzdD0zNzs0NDpleD0wMTszMjoqLnRhcj0wMTszMToqLnRnej0wMTszMToqLmFyYz0wMTszMToqLmFyaj0wMTszMToqLnRhej0wMTszMToqLmxoYT0wMTszMToqLmx6ND0wMTszMToqLmx6aD0wMTszMToqLmx6bWE9MDE7MzE6Ki50bHo9MDE7MzE6Ki50eHo9MDE7MzE6Ki50em89MDE7MzE6Ki50N3o9MDE7MzE6Ki56aXA9MDE7MzE6Ki56PTAxOzMxOiouWj0wMTszMToqLmR6PTAxOzMxOiouZ3o9MDE7MzE6Ki5scno9MDE7MzE6Ki5sej0wMTszMToqLmx6bz0wMTszMToqLnh6PTAxOzMxOiouYnoyPTAxOzMxOiouYno9MDE7MzE6Ki50Yno9MDE7MzE6Ki50YnoyPTAxOzMxOioudHo9MDE7MzE6Ki5kZWI9MDE7MzE6Ki5ycG09MDE7MzE6Ki5qYXI9MDE7MzE6Ki53YXI9MDE7MzE6Ki5lYXI9MDE7MzE6Ki5zYXI9MDE7MzE6Ki5yYXI9MDE7MzE6Ki5hbHo9MDE7MzE6Ki5hY2U9MDE7MzE6Ki56b289MDE7MzE6Ki5jcGlvPTAxOzMxOiouN3o9MDE7MzE6Ki5yej0wMTszMToqLmNhYj0wMTszMToqLmpwZz0wMTszNToqLmpwZWc9MDE7MzU6Ki5naWY9MDE7MzU6Ki5ibXA9MDE7MzU6Ki5wYm09MDE7MzU6Ki5wZ209MDE7MzU6Ki5wcG09MDE7MzU6Ki50Z2E9MDE7MzU6Ki54Ym09MDE7MzU6Ki54cG09MDE7MzU6Ki50aWY9MDE7MzU6Ki50aWZmPTAxOzM1OioucG5nPTAxOzM1Oiouc3ZnPTAxOzM1Oiouc3Znej0wMTszNToqLm1uZz0wMTszNToqLnBjeD0wMTszNToqLm1vdj0wMTszNToqLm1wZz0wMTszNToqLm1wZWc9MDE7MzU6Ki5tMnY9MDE7MzU6Ki5ta3Y9MDE7MzU6Ki53ZWJtPTAxOzM1Oioub2dtPTAxOzM1OioubXA0PTAxOzM1OioubTR2PTAxOzM1OioubXA0dj0wMTszNToqLnZvYj0wMTszNToqLnF0PTAxOzM1OioubnV2PTAxOzM1Oioud212PTAxOzM1OiouYXNmPTAxOw==]]></property><property name="MAIL" fullname="$_SERVER[&#39;MAIL&#39;]" type="string" size="15" encoding="base64"><![CDATA[L3Zhci9tYWlsL2pvZXJn]]></property><property name="PATH" fullname="$_SERVER[&#39;PATH&#39;]" type="string" size="56" encoding="base64"><![CDATA[L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbjovdXNyL2xvY2FsL2dhbWVzOi91c3IvZ2FtZXM=]]></property><property name="PWD" fullname="$_SERVER[&#39;PWD&#39;]" type="string" size="20" encoding="base64"><![CDATA[L3Zhci93d3cvc2EtcGxhdGZvcm0=]]></property><property name="LANG" fullname="$_SERVER[&#39;LANG&#39;]" type="string" size="11" encoding="base64"><![CDATA[ZGVfREUuVVRGLTg=]]></property><property name="GCC_COLORS" fullname="$_SERVER[&#39;GCC_COLORS&#39;]" type="string" size="66" encoding="base64"><![CDATA[ZXJyb3I9MDE7MzE6d2FybmluZz0wMTszNTpub3RlPTAxOzM2OmNhcmV0PTAxOzMyOmxvY3VzPTAxOnF1b3RlPTAx]]></property><property name="SHLVL" fullname="$_SERVER[&#39;SHLVL&#39;]" type="string" size="1" encoding="base64"><![CDATA[MQ==]]></property><property name="HOME" fullname="$_SERVER[&#39;HOME&#39;]" type="string" size="11" encoding="base64"><![CDATA[L2hvbWUvam9lcmc=]]></property><property name="LOGNAME" fullname="$_SERVER[&#39;LOGNAME&#39;]" type="string" size="5" encoding="base64"><![CDATA[am9lcmc=]]></property><property name="SSH_CONNECTION" fullname="$_SERVER[&#39;SSH_CONNECTION&#39;]" type="string" size="35" encoding="base64"><![CDATA[MTkyLjE2OC41Ni4xIDUxODQ2IDE5Mi4xNjguNTYuNTcgMjI=]]></property><property name="_" fullname="$_SERVER[&#39;_&#39;]" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="PHP_SELF" fullname="$_SERVER[&#39;PHP_SELF&#39;]" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="SCRIPT_NAME" fullname="$_SERVER[&#39;SCRIPT_NAME&#39;]" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="SCRIPT_FILENAME" fullname="$_SERVER[&#39;SCRIPT_FILENAME&#39;]" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="PATH_TRANSLATED" fullname="$_SERVER[&#39;PATH_TRANSLATED&#39;]" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="DOCUMENT_ROOT" fullname="$_SERVER[&#39;DOCUMENT_ROOT&#39;]" type="string" size="0" encoding="base64"><![CDATA[]]></property><property name="REQUEST_TIME_FLOAT" fullname="$_SERVER[&#39;REQUEST_TIME_FLOAT&#39;]" type="float"><![CDATA[1496314052.1787]]></property><property name="REQUEST_TIME" fullname="$_SERVER[&#39;REQUEST_TIME&#39;]" type="int"><![CDATA[1496314052]]></property><property name="argv" fullname="$_SERVER[&#39;argv&#39;]" type="array" children="1" numchildren="2"></property><property name="argc" fullname="$_SERVER[&#39;argc&#39;]" type="int"><![CDATA[2]]></property></property><property name="$GLOBALS" fullname="$GLOBALS" type="array" children="1" numchildren="17" page="0" pagesize="100"><property name="_GET" fullname="$GLOBALS[&#39;_GET&#39;]" type="array" children="0" numchildren="0"></property><property name="_POST" fullname="$GLOBALS[&#39;_POST&#39;]" type="array" children="0" numchildren="0"></property><property name="_COOKIE" fullname="$GLOBALS[&#39;_COOKIE&#39;]" type="array" children="0" numchildren="0"></property><property name="_FILES" fullname="$GLOBALS[&#39;_FILES&#39;]" type="array" children="0" numchildren="0"></property><property name="argv" fullname="$GLOBALS[&#39;argv&#39;]" type="array" children="1" numchildren="2"></property><property name="argc" fullname="$GLOBALS[&#39;argc&#39;]" type="int"><![CDATA[2]]></property><property name="_ENV" fullname="$GLOBALS[&#39;_ENV&#39;]" type="array" children="0" numchildren="0"></property><property name="_REQUEST" fullname="$GLOBALS[&#39;_REQUEST&#39;]" type="array" children="0" numchildren="0"></property><property name="_SERVER" fullname="$GLOBALS[&#39;_SERVER&#39;]" type="array" children="1" numchildren="27"></property><property name="GLOBALS" fullname="$GLOBALS[&#39;GLOBALS&#39;]" type="array" children="1" recursive="1"></property><property name="__composer_autoload_files" fullname="$GLOBALS[&#39;__composer_autoload_files&#39;]" type="array" children="1" numchildren="9"></property><property name="loader" fullname="$GLOBALS[&#39;loader&#39;]" type="object" classname="Composer\Autoload\ClassLoader" children="1" numchildren="9"></property><property name="input" fullname="$GLOBALS[&#39;input&#39;]" type="object" classname="Symfony\Component\Console\Input\ArgvInput" children="1" numchildren="6"></property><property name="env" fullname="$GLOBALS[&#39;env&#39;]" type="string" size="3" encoding="base64"><![CDATA[ZGV2]]></property><property name="debug" fullname="$GLOBALS[&#39;debug&#39;]" type="bool"><![CDATA[1]]></property><property name="kernel" fullname="$GLOBALS[&#39;kernel&#39;]" type="object" classname="AppKernel" children="1" numchildren="10"></property><property name="application" fullname="$GLOBALS[&#39;application&#39;]" type="object" classname="Symfony\Bundle\FrameworkBundle\Console\Application" children="1" numchildren="14"></property></property></response> 

<- context_get -i 24 -d 0 -c 2 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="context_get" transaction_id="24" context="2"><property name="RANDOM_COMPAT_READ_BUFFER" fullname="RANDOM_COMPAT_READ_BUFFER" type="int" facet="constant"><![CDATA[8]]></property></response> 

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

<- run -i 26 
Log closed at 2017-06-01 10:48:01 
+0

1)收集xdebug日志,看看发生了什么2)由于我不熟悉Symfony任务如何实际运行...也许他们作为单独的进程运行(这意味着单独的调试会话)?如果是这样 - 您可能需要在PhpStorm设置中将最大会话限制从默认值1增加到5(例如)。 3)由于它是一个CLI,你有SSH访问 - 尝试直接从IDE启动整个调试https://confluence.jetbrains.com/display/PhpStorm/Debugging+with+PhpStorm – LazyOne

+0

1)我真的不知道什么日志我说。 2)ok,提高到5,之前设置为2,没有改变,3)我通过'PHP Remote Debug'配置从IDE启动了远程调试。没有变化,同样的行为。 – lordrhodos

+0

1)也许它试图执行它无法找到映射的代码?远程系统项目中的任何符号链接?尝试删除所有的断点,并只在你希望打破的文件(无法调试的地方)中放入'xdebug_break();' - 有什么区别?什么xdebug日志说这种情况。 2)它不需要那么 - 2是足够的你的情况3)如果它是一个CLI脚本,那么你应该使用普通的“PHP脚本”类型的配置,但使用远程PHP解释器(你必须在你的PhpStorm中设置)。 – LazyOne

回答

0

事实证明,我的SaEventsGroupCommand的本地版本,我试图调试是从虚拟机上的版本不同。在检查映射并尝试@LazyOne提供的所有建议后,我将本地计算机部署到了VM的命令捆绑包中。惊奇之后,它的工作和调试器正按预期在我的突破点突破。

因此,如果有人遇到类似的问题,结论。确保您已将所有代码手动部署到远程服务器,或者您的自动部署设置为将外部更改(例如,不同的git分支)部署到服务器。

相关问题