Debuggen von PHP-Skripten mit NetBeans IDE
Wie Sie bereits wissen, wenn jemand Code in einer Hochsprache schreibt, gibt es zwei Arten von Fehlern, die er oder sie machen könnte – Syntaxfehler und Logikfehler. NetBeans IDE bietet alle notwendigen Werkzeuge, um Ihnen zu helfen, Ihre Skripte zu debuggen und die Fehler zu finden.
Debugging von Syntaxfehlern
Glücklicherweise erkennt NetBeans IDE Syntaxfehler während der Eingabe und unterstreicht sie mit einer gewellten roten Linie, wie in Abbildung 1 gezeigt.
Abbildung 1 In der NetBeans-IDE werden Syntaxfehler mit einer gewellten roten Linie unterstrichen
Sie müssen lediglich den entsprechenden Fehler korrigieren, und die rote Linie verschwindet sofort. Wenn Sie sich jedoch nicht sicher sind, was mit Ihrem Code nicht stimmt, können Sie den Mauszeiger einfach auf das rote Ausrufezeichen setzen. NetBeans IDE wird versuchen, Ihnen zu helfen, indem Sie ein Popup-Fenster mit einer kurzen Erklärung des Fehlers, wie in Abbildung 2 gezeigt.
Abbildung 2 Die NetBeans-IDE zeigt eine Erklärung eines Syntaxfehlers
Debuggen von Logikfehlern durch schrittweises Ausführen von Skripten
Im Vergleich zu Syntaxfehlern sind Logikfehler schwieriger zu finden. Da die NetBeans-IDE Logikfehler nicht erkennen und unterstreichen kann, sind Sie ganz allein! Schauen wir uns zum Beispiel das folgende PHP-Skript an. Der Benutzer wird aufgefordert, zwei Zahlen einzugeben, deren Summe zu berechnen und anzuzeigen. Es enthält jedoch einen Logikfehler!
<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>
Wenn Sie dieses Skript in die NetBeans-IDE eingeben, werden Sie feststellen, dass nicht einmal ein Ausrufezeichen auf einen Fehler hinweist. Wenn Sie das Skript ausführen (UMSCHALT + F6), jedoch, und geben Sie zwei Werte, 5 und 2, Sie können selbst sehen, dass, obwohl die Summe von 5 und 2 ist 7, NetBeans IDE besteht darauf, dass es Null ist, wie in Abbildung 3.
Abbildung 3 Anzeigen des Ergebnisses eines Logikfehlers im Ausgabefenster
Was zum Teufel ist los? Für einen erfahrenen Programmierer wäre es natürlich ein Kinderspiel, diesen Fehler zu korrigieren. Aber für Sie, einen Anfänger, finden Sie nichts Falsches, obwohl Sie sich anstrengen. Also, wo ist der Fehler?
Manchmal werden menschliche Augen so müde, dass sie das Offensichtliche nicht sehen können. Also, lass uns versuchen, etwas Magie zu benutzen! Versuchen wir, das Skript Schritt für Schritt mit dem Debugger auszuführen. Dies gibt Ihnen die Möglichkeit, den Ausführungsfluss zu beobachten und die aktuellen Werte der Variablen in jedem Schritt genauer zu betrachten.
Starten Sie den Debugger, indem Sie im Hauptmenü „Debug →
Debug File“ auswählen oder die Tastenkombination STRG + UMSCHALT+F5 drücken. Auf diese Weise aktivieren Sie den Debugger und weitere Symbole werden in der Symbolleiste angezeigt.
Hinweis: Um den Debugger (XDebug) zu aktivieren, müssen Sie das PHP ändern.ini-Datei. Weitere Informationen hier.
Der Programmzähler (das grüne Pfeilsymbol am grauen Rand) stoppt an der ersten Zeile des Skripts, wie in Abbildung 4 gezeigt.
Abbildung 4 Verwenden des Debuggers in der NetBeans-IDE
Hinweis: Der Programmzähler zeigt Ihnen jederzeit an, welche Anweisung als nächstes ausgeführt wird.
Klicken Sie auf das Symbol „Step into“ in der Symbolleiste. Diese Aktion weist den PHP-Interpreter an, die Anweisung $s = 0
auszuführen, und der Programmzähler wechselt zur zweiten PHP-Anweisung, die als nächstes ausgeführt wird.
Wählen Sie im Hauptmenü „Fenster →
Debugging →
Variablen“. In dem angezeigten Fenster können Sie alle im Hauptspeicher (RAM) deklarierten Variablen und den Wert, den sie während jedes Ausführungsschritts enthalten, anzeigen. Bisher ist die einzige deklarierte Variable, der ein Wert zugewiesen wurde, die Variable $s
, wie in Abbildung 5 dargestellt.
Abbildung 5 Der Wert der Variablen $s wird im Variablenfenster des Debuggers angezeigt
Klicken Sie erneut auf das Symbol „Step into“ in der Symbolleiste. Die zweite Anweisung wird ausgeführt. Sie können zum Fenster „Ausgabe“ zurückkehren und das Ausgabeergebnis anzeigen (siehe Abbildung 6).
Abbildung 6 Anzeigen einer Eingabeaufforderung im Ausgabefenster
Klicken Sie erneut auf das Symbol „Step into“ in der Symbolleiste. Die dritte PHP-Anweisung wird ausgeführt und das Programm wartet darauf, dass Sie einen Wert eingeben. Platzieren Sie den Cursor im Fenster „Ausgabe“, geben Sie den Wert 5 ein und drücken Sie die Taste „Eingabetaste ↵“.
Der Programmzähler wechselt zur vierten PHP-Anweisung. Wenn Sie zum Fenster „Variablen“ zurückkehren, sehen Sie, dass derzeit zwei Variablen ($a
und $s
) im Hauptspeicher (RAM) deklariert sind, wie in Abbildung 7 gezeigt.
Abbildung 7 Die Werte der Variablen $a und $s werden im Variablenfenster angezeigt
Klicken Sie zweimal auf das Symbol „Step into“ in der Symbolleiste. Diese Aktion führt die vierte und fünfte PHP-Anweisung aus. Platzieren Sie den Cursor im Fenster „Ausgabe“, geben Sie den Wert 2 ein und drücken Sie die Taste „Eingabetaste ↵“.
Der Programmzähler wechselt zur sechsten PHP-Anweisung. Wenn Sie zum Fenster „Variablen“ zurückkehren, können Sie sehen, dass in diesem Moment drei Variablen ($a, $b
und $s
) im Hauptspeicher (RAM) deklariert sind, wie in Abbildung 8 gezeigt.
Abbildung 8 Die Werte der Variablen $a, $b
und $s
werden im Variablenfenster
angezeigt.Klicken Sie erneut auf das Symbol „Step into“ . Die Anweisung $S = $a + $b
wird ausgeführt. Was Sie hier erwartet haben, war die Summe von 5 und 2, also 7, die der Variablen $s
zugewiesen werden soll. Stattdessen wird eine neue Variable $S
im Hauptspeicher (RAM) deklariert und ihr der Wert 7 zugewiesen, wie in Abbildung 9 gezeigt.
Abbildung 9 Alle deklarierten Variablen werden im Variablenfenster des Debuggers angezeigt
Jetzt wird es für Sie offensichtlicher! Sie haben fälschlicherweise zwei Variablen im Hauptspeicher (RAM) deklariert, die Variable $s
und die Variable $S
mit einem Großbuchstaben S. Wenn also der Ausführungsfluss zur letzten Anweisung geht, wird echo "The sum is: ", $s
der Wert 0 anstelle des Wertes 7 angezeigt.
Sie haben den Fehler gerade gefunden! Klicken Sie auf das Symbol „Debugger-Sitzung beenden“ , um die Ausführung abzubrechen, korrigieren Sie den Fehler, indem Sie die Variable $S
in $s
ändern, und Sie sind bereit! Sie haben gerade Ihr erstes Debugging durchgeführt! Führen Sie das Skript erneut aus und Sie werden nun sehen, dass es die Summe korrekt berechnet und anzeigt.
Logikfehler durch Hinzufügen von Haltepunkten debuggen
Das schrittweise Debuggen hat einen großen Nachteil. Sie müssen immer wieder auf das Symbol „Step into“ in der Symbolleiste klicken, bis Sie die Position erreichen, an der sich der Fehler möglicherweise befindet. Können Sie sich vorstellen, dies in einem großen Skript zu tun?
Für große Skripte gibt es einen anderen Ansatz. Wenn Sie vermuten, dass sich der Fehler irgendwo am Ende des Skripts befindet, müssen Sie nicht alles von Anfang an debuggen. Sie können eine Markierung (einen sogenannten „Haltepunkt“) hinzufügen, an der Sie glauben, dass der Fehler liegen könnte, das Skript ausführen und wenn der Ausführungsfluss diesen Haltepunkt erreicht, wird der Ausführungsfluss automatisch angehalten. Sie können sich dann die aktuellen Werte der Variablen an der Position, an der das Skript angehalten wurde, genauer ansehen.
Hinweis: Wenn das Skript pausiert, haben Sie zwei Möglichkeiten, die Ausführung fortzusetzen: Sie können irgendwo unten im Skript einen zweiten Haltepunkt hinzufügen, auf das Symbol „Weiter“ in der Symbolleiste klicken und dem Skript erlauben, die Ausführung bis zu diesem neuen Haltepunkt fortzusetzen. oder Sie können einfach das Symbol „Schritt in“ in der Symbolleiste verwenden und das Skript danach Schritt für Schritt ausführen.
Das nächste PHP-Skript fordert den Benutzer auf, zwei Werte einzugeben, und berechnet deren Durchschnittswert.
Das Skript enthält jedoch einen Logikfehler. Wenn der Benutzer die Werte 10 und 12 eingibt, wird der Wert 16 anstelle von 11 angezeigt.
<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>
Sie vermuten, dass das Problem irgendwo am Ende des Skripts liegt. Sie möchten jedoch nicht das gesamte Skript debuggen, sondern nur den Teil, in dem der Fehler möglicherweise liegt. Versuchen wir also, der Anweisung $average = $a + $b / 2
einen Haltepunkt hinzuzufügen (siehe Abbildung 10). Es gibt zwei Möglichkeiten, dies zu tun: sie können im linken grauen Rand auf die entsprechende Zeilennummer klicken oder den Cursor an der gewünschten Zeile platzieren und die Tastenkombination STRG + F8 drücken.
Abbildung 10 Hinzufügen eines Haltepunkts zu einem Skript
Hinweis: Sie wissen, dass ein Haltepunkt gesetzt wurde, wenn das rosa Rechteck am grauen Rand angezeigt wird und die entsprechende Zeile einen rosa Hintergrund hat, der sie hervorhebt.
Drücken Sie STRG + UMSCHALT + F5, um den Debugger zu starten. Klicken Sie auf das Symbol „Weiter“ in der Symbolleiste und geben Sie bei Bedarf die Werte 10 und 12 ein. Sie werden feststellen, dass kurz nachdem Sie die zweite Nummer eingegeben und die Taste „Enter ↵“ gedrückt haben, der Ausführungsfluss am Haltepunkt angehalten wird. (Sie werden sehen, dass die pinke Breakpoint-Hervorhebung durch die grüne Hervorhebung des Programmzählers ersetzt wird.)
Denken Sie daran! Sie können eine Datei debuggen, indem Sie im Hauptmenü „Debug
→
Debug File“ auswählen oder die Tastenkombination STRG + UMSCHALT + F5 drücken.
Jetzt können Sie sich die aktuellen Werte der Variablen genauer ansehen. Variablen $a
und $b
enthalten die Werte 10 und 12, wie sie sollten, so gibt es nichts falsch mit der Dateneingabe, wie in Abbildung 11 gezeigt.
Abbildung 11 Anzeigen der aktuellen Werte von zwei Variablen im Variablenfenster
Klicken Sie einmal auf das Symbol „Step into“ in der Symbolleiste. Die Anweisung $average = $a + $b / 2
wird ausgeführt und der Arbeitsspeicher (RAM) enthält nun die folgenden Werte (siehe Abbildung 12).
Abbildung 12 Anzeigen der aktuellen Werte von drei Variablen im Variablenfenster
Da ist es! Sie haben gerade die Anweisung gefunden, die der Variablen $average
fälschlicherweise den Wert 16 anstelle von 11 zuweist! Und jetzt kommt der schwierige Teil; Sie sollten überlegen, warum dies geschieht!
Nach zwei Tagen des Nachdenkens wird es offensichtlich! Sie hatten gerade vergessen, $a + $b
in Klammern zu setzen; Daher wurde nur die Variable $b
durch 2 geteilt. Klicken Sie auf das Symbol „Debugger-Sitzung beenden“ , entfernen Sie alle Haltepunkte, korrigieren Sie den Fehler, indem Sie $a + $b
in Klammern setzen, und Sie sind bereit! Führen Sie das Skript erneut aus und sehen Sie nun, dass es den Durchschnittswert korrekt berechnet und anzeigt.