2017-06-01 4 views
1

ProblemWie remote Debug-Konsole Befehle in Symfony

Ich möchte Symfony Konsole Befehle auf einem Remote-VM-Server debuggen. Ich kann es zum Debuggen des bin/console-Skripts und aller zugehörigen Methodenaufrufe in der \Symfony\Bundle\FrameworkBundle\Console\Application bekommen, aber sobald es die execute-Methode des spezifischen Befehls aufruft (in symfony/symfony/src/Symfony/Component/Console/Command/Command.php:256), verliert das Debugger-Mapping irgendwie die Zuordnung und funktioniert nicht mehr. Ich kann es nicht an irgendwelchen Breakpoints brechen, die ich auf den spezifischen Befehl gesetzt habe.

Setup-

Auf der VM habe ich folgende PHP-Einstellungen:

# /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 

die Debug-Sitzung vor dem Start einen SSH-Tunnel mit

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

In PhpStorm Ich habe ich erstellen Konfigurieren Sie die Implementierung mit SFTP, und stellen Sie den PHP-CLI-Interpreter auf die entfernte PHP-CLI-Version ein.

Ich aktiviere die "Start Listening for PHP Debug Verbindungen". Das erste Mal, wenn die Verbindung hergestellt wurde, wurde die Server Debug-Verbindung erstellt und ich hinzugefügt, um die Zuordnung für das Root-Verzeichnis des Projektes:

PHP Server Config

auf meinem lokalen Rechner der IP 192.168.56.57 die Domäne abgebildet wird sa-platform.dev-vm in /etc/hosts.

Wenn ich meinen Befehl auf der VM bin/console sa:events:group aufrufen, bekomme ich die Verbindung in PhpStorm in der ersten Zeile des zugehörigen Konsolenskript stoppen.

debug connection breaking at first line of console script

Und ich kann bis zu dem Punkt debuggen, wo die Funktion von meinem Befehl ausführt aufgerufen wird:

debug console application until command execute function is called

Aber danach keine Chance, meinen Befehl zu debuggen.

Ich habe versucht, die PHP-Server-Zuordnung in PHPStorm direkt auf die Befehlsdateien, die nicht funktioniert haben.

Jede Hilfe wird geschätzt.

UPDATE: Wie vorgeschlagen habe ich die Protokolldatei hinzugefügt und die externen Debug-Verbindungen zu 5 in PHPStorm akzeptieren.

Ich habe keine Ahnung über das Protokoll, aber vielleicht jemand tut?

Die complete log of one session can be found here. Die letzten Einträge wie folgt aussehen:

<- 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) Collect xdebug log um zu sehen, was dort passiert 2) Da ich nicht vertraut bin, wie Symfony Aufgaben tatsächlich ausgeführt werden ... vielleicht laufen sie als separater Prozess (was bedeutet separate Debug-Sitzung)? Wenn ja, müssen Sie möglicherweise das maximale Sitzungslimit von Standard 1 auf 5 (z. B.) in den PhpStorm-Einstellungen erhöhen. 3) Da es eine CLI ist und Sie SSH-Zugriff haben - versuchen Sie, das gesamte Debug direkt aus der IDE https://confluence.jetbrains.com/display/PhpStorm/Debugging+mit +PhpStorm – LazyOne

+0

1) Ich kann nicht wirklich herausfinden, was das Protokoll sagt mir. 2) ok, auf 5 erhöht, wurde vorher auf 2 gesetzt, keine Änderung, 3) Ich startete das Remote-Debug von der IDE über eine 'PHP Remote Debug'-Konfiguration. Keine Veränderung, gleiches Verhalten. – lordrhodos

+0

1) Vielleicht versucht es den Code auszuführen, für den das Mapping nicht gefunden werden kann? Beliebige symbolische Links im Projekt auf Remote-System? versuche, alle deine Breakpoints zu entfernen und lege nur 'xdebug_break();' in die Datei, in die du brechen willst (wo es nicht debuggen kann) - irgendeinen Unterschied? was Xdebug Log für ein solches Szenario sagt. 2) Es wurde nicht benötigt - 2 war genug für Ihren Fall 3) Wenn es ein CLI-Skript ist, dann sollten Sie gewöhnliche "PHP Script" Art von Config verwenden aber Remote PHP Interpreter verwenden (was Sie in Ihrem PHPStorm einstellen müssen). – LazyOne

Antwort

0

Wie sich herausstellte, meine lokale Version des SaEventsGroupCommand Ich war zu debuggen versuchen, unterschied sich von der Version auf dem VM.Nachdem ich das Mapping geprüft und alle Vorschläge von @LazyOne ausprobiert habe, habe ich eine Deployment-Form meines lokalen Rechners zur VM für das Befehlsbündel erstellt. Und die Überraschung danach klappte und der Debugger brach wie geplant an meinen Breakpoints.

So Fazit, wenn jemand auf ein ähnliches Problem stößt. Stellen Sie sicher, dass Sie Ihren gesamten Code manuell auf dem Remote-Server bereitgestellt haben, oder dass die automatische Bereitstellung so eingerichtet ist, dass externe Änderungen (z. B. verschiedene Git-Zweige) auf dem Server bereitgestellt werden.

Verwandte Themen