2017-06-01 109 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分支)部署到服務器。

相關問題