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?

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.


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

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.

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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.