Kann Xdebug durch Drush-Befehle ausgelöst werden?

9

Bei der Installation der Site mit tritt ein Problem mit meinen Funktionsmodulen und dem Installationsprofil auf drush si. Es gibt eine Reihe von wahrscheinlich verwandten Problemen in der Warteschlange für Features, aber keine mit guten Lösungen. Der interessante Teil (in einigen Problemen erwähnt) ist, dass es gut funktioniert, wenn die Site über den Browser installiert wird, aber bei der Installation mit fehlschlägt drush si.

Ich habe eine Vorstellung davon, was los ist, muss sie aber bestätigen. Die einzige Möglichkeit, dies zu bestätigen, besteht darin, den Code mit einem Debugger zu durchlaufen (Xdebug ist das, was ich eingerichtet habe). Ist es also möglich, Xdebug von einem mit Drush ausgeführten Befehl auszulösen? Kann ich Xdebug dazu bringen, beim Laufen einzuschalten drush si?

Chaulky
quelle

Antworten:

4

du musst dich daran erinnern, dass du mit drush (angeblich) in cli bist, also sollte dies helfen:

/programming/1947395/how-can-i-debug-a-php-cli-script-with-xdebug

Versuchen Sie auch, den Befehl mit der Option -d (--debug) auszuführen. Er sollte Ihnen viele Informationen darüber geben, was falsch läuft.

Mojzis
quelle
Können Sie einige Informationen zum Festlegen eines Haltepunkts in Drush / Drupal-spezifischem Code hinzufügen? dh eine Zeilennummer in einer Datei, bei der der Debugger unterbrochen wird, wenn drush ausgeführt wird?
Therobyouknow
Eine Antwort auf meine Frage scheint hier zu sein: randyfay.com/content/… : - "Wenn Sie die meisten Drush-Aktionen debuggen, können Sie einen Haltepunkt in die erste Zeile von drupal_bootstrap () in include / bootstrap.inc setzen."
Therobyouknow
3

Sie können die Funktionen xdebug_start_trace()und xdebug_stop_trace()XDebug verwenden, um den Debugger bei Bedarf zu starten. Stellen Sie sicher, dass Sie XDebug zuerst in der CLI konfiguriert haben ( php -i | grep xdebug).

Erstellen Sie dann wie folgt eine neue einzeilige PHP-Datei (z. B. drush_xdebug_start.inc):

<?php xdebug_start_trace();

Führen Sie dann den Drush wie folgt aus:

drush --early="$PWD"/drush_xdebug_start.inc whatever_command_you_need
Kenorb
quelle
2

Ich benutze XDebug die ganze Zeit für Drush-Anfragen.

  1. Stellen Sie sicher, dass XDebug in Ihre CLI-PHP geladen ist, indem Sie ausführen php -i
  2. Stellen Sie sicher, dass Ihr Client auf XDebug-Verbindungen wartet und dies am richtigen Port tut. Ich habe erfolgreich mit PHPStorm, Netbeans und Komodo IDE als Clients debuggt.
moshe weitzman
quelle
1
Können Sie ein Beispiel dafür geben, wo (innerhalb von Drush selbst oder innerhalb eines anderen Drupal-Codes, den Drush aufruft) ein Haltepunkt gesetzt wird, damit xdebug in dieser Codezeile bricht, wenn Drush ausgeführt wird?
Therobyouknow
Eine Antwort auf meine Frage scheint hier zu sein: randyfay.com/content/… : - "Wenn Sie die meisten Drush-Aktionen debuggen, können Sie einen Haltepunkt in die erste Zeile von drupal_bootstrap () in include / bootstrap.inc setzen."
Therobyouknow
1

Angenommen, Sie haben Xdebug richtig konfiguriert, ist es sehr einfach, Ihre IDE zu integrieren, um den Code schrittweise zu durchlaufen. Setzen Sie einfach die Umgebungsvariable XDEBUG_CONFIG auf "idekey = MYIDEKEY".

Machen Sie es einfacher, indem Sie einen Alias ​​dafür einrichten. Folgendes verwende ich in meiner .alias-Datei (tcsh):

alias xdebugon 'setenv XDEBUG_CONFIG "idekey=MYIDEKEY"'
alias xdebugoff 'unsetenv XDEBUG_CONFIG'
Harry Slaughter
quelle