PHP-Debugging - So debuggen Sie Ihren PHP-Code (Drupal-Debugging-Techniken enthalten!)

Veröffentlicht: 2019-09-03

Debuggen ist nicht etwas, worauf sich Entwickler freuen. Entwickler verabscheuen Fehler, aber um qualitativ hochwertige Software erstellen zu können, ist das Debuggen ein unverzichtbarer Bestandteil des Lebens eines Entwicklers. Jeder PHP-Entwickler hat einen anderen Stil und andere Methoden zum Debuggen seines Codes. Dies hängt von ihrer Erfahrung, ihrem Problemlösungsansatz und vor allem von der Zeit ab, die sie zur Verfügung haben!

Wie wichtig ist das Debuggen und warum müssen Sie Ihren Code debuggen?

Debugging ist ein integraler Bestandteil eines Softwareentwicklungslebenszyklus, der qualitativ hochwertige Ergebnisse sicherstellt.
Stellen Sie sich das vor - Die Codebasis ist groß, Sie sind neu im Projekt, Sie haben nicht viele Details des Projekts/der Funktionalität. Aber Sie sollen einen Fehler beheben. Wo fangen wir an? Wir beginnen damit, den Code Schritt für Schritt zu analysieren, um zu verstehen, was getan wird und wo etwas schief läuft. Das, meine Freunde, ist Debugging. Debugging ist eine Kunst, die mit Übung und Erfahrung besser werden kann.

So debuggen Sie Ihren PHP-Code

Okay, hier ist ein Fall, auf den ich in meiner Entwicklungskarriere gestoßen bin. Es gibt eine auf Wordpress basierende Commerce-Site, bei der der Checkout-Prozess etwa 5-8 Minuten dauerte und ich gebeten wurde, ihn zu lösen. In diesem Fall habe ich nicht viel Wissen darüber, wie die Dinge mit Wordpress funktionieren. Also begann ich damit, die Optionen aus der Liste nacheinander abzuhaken, wie zum Beispiel: (a) Liegt es an einem Plugin? (b) Ist es themenbezogen? (c) Ist es eine benutzerdefinierte Codebasis? etc.

Das Tool, das mir beim PHP-Debuggen und Lösen dieses Falls geholfen hat, ist Blackfire. Dies gibt Ihnen eine besser lesbare Option für den Stack-Trace aller Funktionen, die für jede Funktion im gesamten Prozess benötigte Zeit. Dadurch habe ich die Funktion gefunden, die den Checkout-Prozess auffrisst. Alles, was Sie brauchen, ist ein Setup, um den Schlüssel zu Ihrer Codebasis hinzuzufügen, und Sie können alle Funktionen mithilfe der Dokumentation analysieren.
Sie können die Fehler also beheben, wenn Sie Kenntnisse über mehrere Methoden des PHP-Debuggings haben.

Code-Debugging-Techniken

Lassen Sie mich über einige Techniken sprechen, die ich zum Debuggen von PHP verwendet habe.
Eine einfache und häufigste Methode, um zu überprüfen, ob die von Ihnen geschriebene Funktion oder Methode aufgerufen wird, ist das Schreiben eines Exits. Es gibt keinen Entwickler, der dies nicht verwendet hat!
Um den Wert einer Variablen zu überprüfen, print_r(), var_dump(), var_export(). Okay, sehen wir den Unterschied.

Beispiel:

 Angenommen, ein Array 
$a = Array( 1, Array( "a", "b") );
print_r($a);

 
Array
(
[ 0 ] => 1
[ 1 ] => Array
(
[ 0 ] => 'ein'
[ 1 ] => 'b'
)
)

Dies gibt ein lesbares Format und Informationen über die Variable. Außerdem können wir es mit print_r($var, true) in einer Variablen speichern.

 var_dump( $a );
 Array ( 3 ) {
[ 0 ]=>
int( 1 )
[ 1 ]=>
  Array ( 2 ) {
[ 0 ]=>
string( 1 ) "a"
[ 1 ]=>
Zeichenfolge ( 1 ) "b"
}
}

Dies wird zusammen mit Typ und Länge jedes Werts gedruckt. Und das ist im Vergleich zu print_r() schneller
var_export( $a );

 Array (
  0 => 1 ,
  1 =>
  Array (
    0 => 'a' ,
    1 => 'b' ,
),
)

Dies wird zusammen mit Typ und Länge jedes Werts gedruckt. Und das ist im Vergleich zu print_r() schneller
var_export( $a );

Dies gibt gültiges PHP zurück, wenn eine Variable vorhanden ist, andernfalls wird false zurückgegeben. Das heißt, die Ausgabe von var_export kann direkt in einer PHP-Datei verwendet werden.

Haben Sie jemals Debug ($var, NULL, TRUE) verwendet, das vom Drupal-Kern bereitgestellt wird? Dies verwendet print_r() oder var_export basierend auf den Argumenten, die an die PHP-Debug-Funktion übergeben werden.

Was ist mit den Warnungen wie unten, bei denen Sie keine Ahnung haben, welche Codezeile eine solche Warnung verursacht.

Warnung: Ungültiges Argument für foreach() in /modules/node/node.module in Zeile 485 angegeben .

Wir wissen, dass es so viele Stellen gibt, an denen das Knotenmodul aufgerufen wird. Also, wie lösen Sie das? Eine schnellere Möglichkeit, ohne andere externe Ressourcen zu verwenden, ist die Verwendung der PHP-Funktion debug_backtrace() . Gehen Sie zu „drupal_set_message“, denn Sie wissen, dass dies die Methode ist, die die Warnung ausgibt . Setzen Sie die untere Zeile in diese Funktion ein

debug_backtrace();

Ausgabe:

Array
(
[ 0 ] => Array
(
[Datei] => /includes/common.inc
[Linie] => 552
[ Funktion ] => drupal_set_message
[ args ] => Array
(
[ 0 ] => Warnung: Ungültig

Argument geliefert für foreach() in

/modules/node/node.module in Zeile 504.
[ 1 ] => Fehler
)

)

[1] => Array
(
[Datei] => /modules/node/node.module
[Linie] => 504
[Funktion] => error_handler
[args] => Array
(
[ 0 ] => 2
[ 1 ] => Ungültiges Argument
geliefert für foreach()
[ 2 ] => /module/node/
Knoten.Modul
[ 3 ] => 504
[ 4 ] => Array
(
[param] =>
[Überarbeitung] =>
[zurücksetzen] =>
...
)

)

)

[2] => Array
(
[Datei] => /sites/all/modules/custom/custom_module
/custom_module.module
[Linie] => 10
[Funktion] => node_load
[args] => Array
(
[ 0 ] =>
)

)

[3] => Array
(
[Datei] => /includes/form.inc
[Linie] => 365
[Funktion] => custom_module_form_alter
[args] => Array
(
...

Diese Funktion zeigt den Stack aller Funktionen an, die beim Verursachen der Warnung aufgerufen werden. Stellen Sie sicher, dass Sie das Limit einschränken, sonst zeigt PHP eine „Speicher erschöpft“-Meldung an, wenn die Anzeige des Stack zu lange dauert.

Debuggen über CLI:

Von phpdbg gehört ! Ja, es gibt eine PHP-Erweiterung, die ab PHP 5.6+ verfügbar ist und zum Debuggen einer PHP-Datei über die Befehlszeile verwendet wird.
Öffnen Sie Ihr Terminal, geben Sie „phpdbg“ ein. Dies startet eine interaktive PHP-Debugger-Shell. Sie können auch Haltepunkte verwenden! Probieren Sie es einfach aus - die versteckte Methode zum Debuggen von PHP.
Das einzige Problem ist: Sie müssen sich an die Befehle von phpdbg gewöhnen, um sie besser nutzen zu können.

Debuggen über Drupal:

Devel Kint: Drupal-Entwickler verwenden dies ziemlich oft. Kint ist ein Untermodul des Devel-Moduls, das zum Debuggen von Drupal 8-Twig-Templates zusammen mit dump() verwendet werden kann;

DB Log: Wer kennt dieses Drupal-Modul nicht?! In D7 ist es watchdog() und D8 ist es der Logger-Dienst.

\Drupal:: logger ( 'my_module' )->debug($message);

Aber der einzige Grund, warum wir die Verwendung dieses Moduls nicht empfehlen, obwohl wir es lieben, ist, dass die Log-Meldung jedes Mal in die Datenbank geschrieben wird!

Und stellen Sie sich vor, wenn es sich um eine riesige Datenbank handelt, wäre dies noch schlimmer und würde die Leistung beeinträchtigen. Aus diesem Grund wird die Verwendung des DBLOG-Moduls auf Produktionsstandorten nicht empfohlen.
Möchten Sie DBLog, Modul weiterhin verwenden und die Leistungseinbußen reduzieren? Auch dafür gibt es eine Lösung - DBlog Filter. Dies ist ein beigesteuertes Modul, das dabei hilft, die Art der in die Datenbank zu schreibenden Protokolle einzuschränken. Wenn Sie beispielsweise nur Protokolle mit dem Schweregrad „Fehler“ speichern möchten, können Sie diese mit diesem Modul konfigurieren. Sie müssen das Dblog- Modul also nicht vollständig loswerden. Ach ja, und dieses Modul stammt von mir ;)

Webprofiler

Web Profiler ist wieder ein von Devel bereitgestelltes Modul. Sobald Sie das Modul aktiviert haben, sehen Sie unten im Fenster einen Bericht. Immer wenn eine Seite geladen wird, gibt uns dieser Bericht die Seitenladezeit, die Anzahl der auf der Seite ausgeführten Abfragen, die Anzahl der Formulare, die Anzahl der js/css-Dateien usw. auf dieser Seite an.

Webprofiler

Ja, dies bietet sogar Details zu jedem Abschnitt, indem Sie darauf klicken. Die folgende Abbildung zeigt beispielsweise die Abfragen auf der Startseite.

Xdebug

XDebug - Debuggen über IDE:

Die beste und benutzerfreundlichere Methode zum Debuggen, die die meisten Leute bevorzugen, wenn sie eine IDE zum Codieren verwenden, ist die Verwendung von XDebug. XDebug ist eine PHP-Erweiterung, die bei der Entwicklung und beim Debuggen hilft und einen einstufigen Debugger bietet, den Sie mit einer IDE wie PHPStorm verwenden können. Um die besten Ergebnisse zu erzielen, müssen Sie natürlich mehr Aufwand betreiben, um die Erweiterung mit der von Ihnen verwendeten IDE zu installieren und zu konfigurieren.