我想遠程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調試連接」。連接被做了第一次,創建服務器調試連接,我加了映射項目的根目錄:
在我的本地計算機的IP 192.168.56.57
被映射到域sa-platform.dev-vm
在/etc/hosts
。
當我在VM bin/console sa:events:group
上調用我的命令時,我在相關控制檯腳本的第一行停止了PhpStorm中的連接。
而且我可以調試,直到在我的命令的執行函數調用點:
但在那之後沒有機會調試我的命令。
我已經嘗試將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['COMP_WORDBREAKS']" type="string" size="12" encoding="base64"><![CDATA[IAkKIic+PDt8Jig6]]></property><property name="TERM" fullname="$_SERVER['TERM']" type="string" size="14" encoding="base64"><![CDATA[eHRlcm0tMjU2Y29sb3I=]]></property><property name="SHELL" fullname="$_SERVER['SHELL']" type="string" size="9" encoding="base64"><![CDATA[L2Jpbi9iYXNo]]></property><property name="SSH_CLIENT" fullname="$_SERVER['SSH_CLIENT']" type="string" size="21" encoding="base64"><![CDATA[MTkyLjE2OC41Ni4xIDUxODQ2IDIy]]></property><property name="OLDPWD" fullname="$_SERVER['OLDPWD']" type="string" size="11" encoding="base64"><![CDATA[L2hvbWUvam9lcmc=]]></property><property name="SSH_TTY" fullname="$_SERVER['SSH_TTY']" type="string" size="10" encoding="base64"><![CDATA[L2Rldi9wdHMvMA==]]></property><property name="USER" fullname="$_SERVER['USER']" type="string" size="5" encoding="base64"><![CDATA[am9lcmc=]]></property><property name="LS_COLORS" fullname="$_SERVER['LS_COLORS']" type="string" size="1422" encoding="base64"><![CDATA[cnM9MDpkaT0wMTszNDpsbj0wMTszNjptaD0wMDpwaT00MDszMzpzbz0wMTszNTpkbz0wMTszNTpiZD00MDszMzswMTpjZD00MDszMzswMTpvcj00MDszMTswMTpzdT0zNzs0MTpzZz0zMDs0MzpjYT0zMDs0MTp0dz0zMDs0Mjpvdz0zNDs0MjpzdD0zNzs0NDpleD0wMTszMjoqLnRhcj0wMTszMToqLnRnej0wMTszMToqLmFyYz0wMTszMToqLmFyaj0wMTszMToqLnRhej0wMTszMToqLmxoYT0wMTszMToqLmx6ND0wMTszMToqLmx6aD0wMTszMToqLmx6bWE9MDE7MzE6Ki50bHo9MDE7MzE6Ki50eHo9MDE7MzE6Ki50em89MDE7MzE6Ki50N3o9MDE7MzE6Ki56aXA9MDE7MzE6Ki56PTAxOzMxOiouWj0wMTszMToqLmR6PTAxOzMxOiouZ3o9MDE7MzE6Ki5scno9MDE7MzE6Ki5sej0wMTszMToqLmx6bz0wMTszMToqLnh6PTAxOzMxOiouYnoyPTAxOzMxOiouYno9MDE7MzE6Ki50Yno9MDE7MzE6Ki50YnoyPTAxOzMxOioudHo9MDE7MzE6Ki5kZWI9MDE7MzE6Ki5ycG09MDE7MzE6Ki5qYXI9MDE7MzE6Ki53YXI9MDE7MzE6Ki5lYXI9MDE7MzE6Ki5zYXI9MDE7MzE6Ki5yYXI9MDE7MzE6Ki5hbHo9MDE7MzE6Ki5hY2U9MDE7MzE6Ki56b289MDE7MzE6Ki5jcGlvPTAxOzMxOiouN3o9MDE7MzE6Ki5yej0wMTszMToqLmNhYj0wMTszMToqLmpwZz0wMTszNToqLmpwZWc9MDE7MzU6Ki5naWY9MDE7MzU6Ki5ibXA9MDE7MzU6Ki5wYm09MDE7MzU6Ki5wZ209MDE7MzU6Ki5wcG09MDE7MzU6Ki50Z2E9MDE7MzU6Ki54Ym09MDE7MzU6Ki54cG09MDE7MzU6Ki50aWY9MDE7MzU6Ki50aWZmPTAxOzM1OioucG5nPTAxOzM1Oiouc3ZnPTAxOzM1Oiouc3Znej0wMTszNToqLm1uZz0wMTszNToqLnBjeD0wMTszNToqLm1vdj0wMTszNToqLm1wZz0wMTszNToqLm1wZWc9MDE7MzU6Ki5tMnY9MDE7MzU6Ki5ta3Y9MDE7MzU6Ki53ZWJtPTAxOzM1Oioub2dtPTAxOzM1OioubXA0PTAxOzM1OioubTR2PTAxOzM1OioubXA0dj0wMTszNToqLnZvYj0wMTszNToqLnF0PTAxOzM1OioubnV2PTAxOzM1Oioud212PTAxOzM1OiouYXNmPTAxOw==]]></property><property name="MAIL" fullname="$_SERVER['MAIL']" type="string" size="15" encoding="base64"><![CDATA[L3Zhci9tYWlsL2pvZXJn]]></property><property name="PATH" fullname="$_SERVER['PATH']" type="string" size="56" encoding="base64"><![CDATA[L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbjovdXNyL2xvY2FsL2dhbWVzOi91c3IvZ2FtZXM=]]></property><property name="PWD" fullname="$_SERVER['PWD']" type="string" size="20" encoding="base64"><![CDATA[L3Zhci93d3cvc2EtcGxhdGZvcm0=]]></property><property name="LANG" fullname="$_SERVER['LANG']" type="string" size="11" encoding="base64"><![CDATA[ZGVfREUuVVRGLTg=]]></property><property name="GCC_COLORS" fullname="$_SERVER['GCC_COLORS']" type="string" size="66" encoding="base64"><![CDATA[ZXJyb3I9MDE7MzE6d2FybmluZz0wMTszNTpub3RlPTAxOzM2OmNhcmV0PTAxOzMyOmxvY3VzPTAxOnF1b3RlPTAx]]></property><property name="SHLVL" fullname="$_SERVER['SHLVL']" type="string" size="1" encoding="base64"><![CDATA[MQ==]]></property><property name="HOME" fullname="$_SERVER['HOME']" type="string" size="11" encoding="base64"><![CDATA[L2hvbWUvam9lcmc=]]></property><property name="LOGNAME" fullname="$_SERVER['LOGNAME']" type="string" size="5" encoding="base64"><![CDATA[am9lcmc=]]></property><property name="SSH_CONNECTION" fullname="$_SERVER['SSH_CONNECTION']" type="string" size="35" encoding="base64"><![CDATA[MTkyLjE2OC41Ni4xIDUxODQ2IDE5Mi4xNjguNTYuNTcgMjI=]]></property><property name="_" fullname="$_SERVER['_']" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="PHP_SELF" fullname="$_SERVER['PHP_SELF']" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="SCRIPT_NAME" fullname="$_SERVER['SCRIPT_NAME']" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="SCRIPT_FILENAME" fullname="$_SERVER['SCRIPT_FILENAME']" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="PATH_TRANSLATED" fullname="$_SERVER['PATH_TRANSLATED']" type="string" size="11" encoding="base64"><![CDATA[YmluL2NvbnNvbGU=]]></property><property name="DOCUMENT_ROOT" fullname="$_SERVER['DOCUMENT_ROOT']" type="string" size="0" encoding="base64"><![CDATA[]]></property><property name="REQUEST_TIME_FLOAT" fullname="$_SERVER['REQUEST_TIME_FLOAT']" type="float"><![CDATA[1496314052.1787]]></property><property name="REQUEST_TIME" fullname="$_SERVER['REQUEST_TIME']" type="int"><![CDATA[1496314052]]></property><property name="argv" fullname="$_SERVER['argv']" type="array" children="1" numchildren="2"></property><property name="argc" fullname="$_SERVER['argc']" 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['_GET']" type="array" children="0" numchildren="0"></property><property name="_POST" fullname="$GLOBALS['_POST']" type="array" children="0" numchildren="0"></property><property name="_COOKIE" fullname="$GLOBALS['_COOKIE']" type="array" children="0" numchildren="0"></property><property name="_FILES" fullname="$GLOBALS['_FILES']" type="array" children="0" numchildren="0"></property><property name="argv" fullname="$GLOBALS['argv']" type="array" children="1" numchildren="2"></property><property name="argc" fullname="$GLOBALS['argc']" type="int"><![CDATA[2]]></property><property name="_ENV" fullname="$GLOBALS['_ENV']" type="array" children="0" numchildren="0"></property><property name="_REQUEST" fullname="$GLOBALS['_REQUEST']" type="array" children="0" numchildren="0"></property><property name="_SERVER" fullname="$GLOBALS['_SERVER']" type="array" children="1" numchildren="27"></property><property name="GLOBALS" fullname="$GLOBALS['GLOBALS']" type="array" children="1" recursive="1"></property><property name="__composer_autoload_files" fullname="$GLOBALS['__composer_autoload_files']" type="array" children="1" numchildren="9"></property><property name="loader" fullname="$GLOBALS['loader']" type="object" classname="Composer\Autoload\ClassLoader" children="1" numchildren="9"></property><property name="input" fullname="$GLOBALS['input']" type="object" classname="Symfony\Component\Console\Input\ArgvInput" children="1" numchildren="6"></property><property name="env" fullname="$GLOBALS['env']" type="string" size="3" encoding="base64"><![CDATA[ZGV2]]></property><property name="debug" fullname="$GLOBALS['debug']" type="bool"><![CDATA[1]]></property><property name="kernel" fullname="$GLOBALS['kernel']" type="object" classname="AppKernel" children="1" numchildren="10"></property><property name="application" fullname="$GLOBALS['application']" 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
1)收集xdebug日誌,看看發生了什麼2)由於我不熟悉Symfony任務如何實際運行...也許他們作爲單獨的進程運行(這意味着單獨的調試會話)?如果是這樣 - 您可能需要在PhpStorm設置中將最大會話限制從默認值1增加到5(例如)。 3)由於它是一個CLI,你有SSH訪問 - 嘗試直接從IDE啓動整個調試https://confluence.jetbrains.com/display/PhpStorm/Debugging+with+PhpStorm – LazyOne
1)我真的不知道什麼日誌我說。 2)ok,提高到5,之前設置爲2,沒有改變,3)我通過'PHP Remote Debug'配置從IDE啓動了遠程調試。沒有變化,同樣的行爲。 – lordrhodos
1)也許它試圖執行它無法找到映射的代碼?遠程系統項目中的任何符號鏈接?嘗試刪除所有的斷點,並只在你希望打破的文件(無法調試的地方)中放入'xdebug_break();' - 有什麼區別?什麼xdebug日誌說這種情況。 2)它不需要那麼 - 2是足夠的你的情況3)如果它是一個CLI腳本,那麼你應該使用普通的「PHP腳本」類型的配置,但使用遠程PHP解釋器(你必須在你的PhpStorm中設置)。 – LazyOne