JavaScript-Fehler beheben

Sofia Emelianova
Sofia Emelianova

In dieser Anleitung lernst du den grundlegenden Workflow zum Beheben von JavaScript-Problemen in den Entwicklertools kennen. Lesen Sie weiter oder sehen Sie sich die Videoversion dieser Anleitung an.

Fehler reproduzieren

Der erste Schritt zur Fehlerbehebung besteht darin, eine Reihe von Aktionen zu finden, mit denen ein Fehler konsistent reproduziert wird.

  1. Öffnen Sie diese Demo in einem neuen Tab.
  2. Geben Sie in das Feld Nummer 1 5 ein.
  3. Geben Sie in das Feld Nummer 2 1 ein.
  4. Klicken Sie auf Nummer 1 und Nummer 2 hinzufügen. Unter der Schaltfläche steht 5 + 1 = 51. Das Ergebnis sollte 6 sein. Diesen Fehler werden Sie beheben.

Das Ergebnis von 5 + 1 ist 51. Sie sollte 6 sein.

In diesem Beispiel beträgt das Ergebnis von 5 + 1 51. Sie sollte 6 sein.

Mit der Benutzeroberfläche des Bereichs "Quellen" vertraut machen

DevTools bietet viele verschiedene Tools für unterschiedliche Aufgaben, z. B. zum Ändern des CSS-Codes, zum Erstellen eines Profils für die Seitenladeleistung und zum Überwachen von Netzwerkanfragen. Im Bereich Quellen können Sie JavaScript-Fehler beheben.

  1. Öffnen Sie die Entwicklertools und gehen Sie zum Bereich Quellen.

    Im Bereich „Quellen“

Der Bereich Quellen ist in drei Abschnitte unterteilt:

Die drei Abschnitte des Bereichs „Quellen“.

  1. Der Tab Seite mit der Dateistruktur Alle von der Seite angeforderten Dateien sind hier aufgeführt.
  2. Im Abschnitt Code-Editor. Nachdem Sie eine Datei auf dem Tab Seite ausgewählt haben, wird der Inhalt dieser Datei hier angezeigt.
  3. Der Bereich Debugger. Verschiedene Tools zur Überprüfung des JavaScript-Codes der Seite.

    Wenn das Entwicklertools-Fenster groß ist, befindet sich der Debugger standardmäßig rechts neben dem Code-Editor. In diesem Fall werden auf den Tabs Umfang und Smartwatch Haltepunkte, Aufrufstack und andere als minimierbare Abschnitte zusammengeführt.

Der Debugger rechts neben dem breiten Fenster.

Code mit einem Haltepunkt pausieren

Eine gängige Methode zum Beheben solcher Probleme besteht darin, viele console.log()-Anweisungen in den Code einzufügen, um die Werte bei der Skriptausführung zu überprüfen. Beispiel:

function updateLabel() {
  var addend1 = getNumber1();
  console.log('addend1:', addend1);
  var addend2 = getNumber2();
  console.log('addend2:', addend2);
  var sum = addend1 + addend2;
  console.log('sum:', sum);
  label.textContent = addend1 + ' + ' + addend2 + ' = ' + sum;
}

Mit der Methode console.log() kann der Job erledigt werden, aber mit Haltepunkten geht das schneller. Mit einem Haltepunkt können Sie den Code während der Ausführung pausieren und alle Werte zu diesem Zeitpunkt prüfen. Haltepunkte haben gegenüber der Methode console.log() einige Vorteile:

  • Mit console.log() müssen Sie den Quellcode manuell öffnen, den relevanten Code suchen, die console.log()-Anweisungen einfügen und dann die Seite neu laden, damit die Nachrichten in der Console angezeigt werden. Mit Haltepunkten können Sie bei dem relevanten Code anhalten, ohne zu wissen, wie er strukturiert ist.
  • In Ihren console.log()-Anweisungen müssen Sie jeden Wert, den Sie prüfen möchten, explizit angeben. Mit Haltepunkten werden in den Entwicklertools die Werte aller Variablen zu diesem Zeitpunkt angezeigt. Manchmal gibt es Variablen, die sich auf Ihren Code auswirken, die Sie nicht einmal kennen.

Kurz gesagt können Haltepunkte Ihnen helfen, Programmfehler schneller zu finden und zu beheben als mit der Methode console.log().

Wenn Sie einen Schritt zurückgehen und über die Funktionsweise der Anwendung nachdenken, können Sie vermuten, dass die falsche Summe (5 + 1 = 51) im Event-Listener click berechnet wird, der der Schaltfläche Zahl 1 und Zahl 2 hinzufügen zugeordnet ist. Daher sollten Sie den Code um die Zeit herum anhalten, zu der der Listener click ausgeführt wird. Mit Ereignis-Listener-Haltepunkten können Sie genau dies tun:

  1. Klicken Sie im Bereich Debugger auf Ereignis-Listener-Haltepunkte, um den Bereich zu maximieren. Die Entwicklertools zeigen eine Liste maximierbarer Ereigniskategorien wie Animation und Zwischenablage an.
  2. Klicken Sie neben der Ereigniskategorie Maus auf arrow_right Maximieren. Die Entwicklertools zeigen eine Liste von Mausereignissen wie click und mousedown an. Neben jedem Ereignis befindet sich ein Kästchen.
  3. Klicken Sie das Kästchen Klicken an. Die Entwicklertools sind jetzt so eingerichtet, dass sie automatisch pausiert werden, wenn ein beliebiger click-Ereignis-Listener ausgeführt wird.

    Das Kontrollkästchen "Klicken" ist aktiviert.

  4. Kehren Sie zur Demo zurück und klicken Sie noch einmal auf Nummer 1 und Nummer 2 hinzufügen. Die Entwicklertools pausieren die Demo und heben im Bereich Quellen eine Codezeile hervor. Die Entwicklertools sollten bei dieser Codezeile pausiert werden:

    function onClick() {
    

    Wenn Sie die Pausierung in einer anderen Codezeile unterbrechen, klicken Sie auf Fortsetzen Skriptausführung fortsetzen, bis Sie in der richtigen Zeile pausiert werden.

Ereignis-Listener-Haltepunkte sind nur eine von vielen Arten von Haltepunkten, die in den Entwicklertools verfügbar sind. Es lohnt sich, alle verschiedenen Typen genauer unter die Lupe zu nehmen, da jeder Typ Ihnen letztendlich hilft, verschiedene Szenarien so schnell wie möglich zu beheben. Weitere Informationen dazu, wann und wie Sie die einzelnen Typen verwenden, finden Sie unter Code mit Haltepunkten pausieren.

Schritt-für-Schritt-Anleitung des Codes

Eine häufige Ursache für Fehler ist, dass ein Skript in der falschen Reihenfolge ausgeführt wird. Wenn Sie den Code durchgehen, können Sie Zeile für Zeile seine Ausführung durchgehen und genau herausfinden, wo er in einer anderen Reihenfolge als erwartet ausgeführt wird. Jetzt ausprobieren:

  1. Klicken Sie in den Entwicklertools im Bereich Quellen auf step_into Step_into Step_in den nächsten Funktionsaufruf, um Zeile für Zeile die Ausführung der Funktion onClick() auszuführen. In den Entwicklertools wird die folgende Codezeile hervorgehoben:

    if (inputsAreEmpty()) {
    
  2. Klicken Sie auf step_over Schritt über den nächsten Funktionsaufruf.

    Die Entwicklertools führen inputsAreEmpty() aus, ohne dass eingreifen zu müssen. Wie Sie sehen, werden in den Entwicklertools einige Codezeilen übersprungen. Dies liegt daran, dass inputsAreEmpty() als „false“ ausgewertet wurde und der Codeblock der if-Anweisung nicht ausgeführt wurde.

Das ist die Grundidee einer Schritt-für-Schritt-Anleitung für Code. Wenn Sie sich den Code in get-started.js ansehen, ist der Fehler wahrscheinlich irgendwo in der Funktion updateLabel() enthalten. Anstatt jede Codezeile durchzugehen, können Sie eine andere Art von Haltepunkt verwenden, um den Code näher an der wahrscheinlichen Position des Fehlers zu pausieren.

Haltepunkt für Codezeile festlegen

Haltepunkte in Zeilenform sind die gängigste Art von Haltepunkten. Wenn Sie eine bestimmte Codezeile haben, die Sie anhalten möchten, verwenden Sie einen Haltepunkt in Form einer Codezeile:

  1. Sehen Sie sich die letzte Codezeile in updateLabel() an:

    label.textContent = addend1 + ' + ' + addend2 + ' = ' + sum;
    
  2. Links neben dem Code sehen Sie die Nummer dieser Codezeile, in diesem Fall 32. Klicken Sie auf 32. In den Entwicklertools wird 32 mit einem blauen Symbol gekennzeichnet. Das bedeutet, dass diese Zeile einen Haltepunkt enthält. Die Entwicklertools unterbrechen jetzt immer, bevor diese Codezeile ausgeführt wird.

  3. Klicken Sie auf Fortsetzen Skriptausführung fortsetzen. Das Skript wird weiter ausgeführt, bis Zeile 32 erreicht wird. In den Zeilen 29, 30 und 31 werden in den Entwicklertools die Werte addend1, addend2 und sum direkt neben ihren Deklarationen angezeigt.

Die Entwicklertools pausieren am Codezeile-Haltepunkt in Zeile 32.

In diesem Beispiel pausiert die Entwicklertools am Haltepunkt der Codezeile in Zeile 32.

Variablenwerte prüfen

Die Werte von addend1, addend2 und sum sehen verdächtig aus. Sie werden in Anführungszeichen gesetzt, also sind es Zeichenfolgen. Dies ist eine gute Hypothese, um die Ursache des Fehlers zu erklären. Jetzt ist es an der Zeit, weitere Informationen zu sammeln. DevTools bietet viele Tools zum Untersuchen von Variablenwerten.

Methode 1: Bereich überprüfen

Wenn Sie eine Codezeile pausieren, sehen Sie auf dem Tab Geltungsbereich, welche lokalen und globalen Variablen an diesem Punkt der Ausführung definiert sind, sowie den Wert jeder Variablen. Gegebenenfalls werden auch Abschlussvariablen angezeigt. Wenn Sie keine Codezeile pausieren, ist der Tab Umfang leer.

Doppelklicken Sie auf einen Variablenwert, um ihn zu bearbeiten.

Bereich „Umfang“.

Methode 2: Watch-Ausdrücke

Auf dem Tab Ansehen können Sie die Werte der Variablen im Zeitverlauf beobachten. Ansehen ist nicht nur auf Variablen beschränkt. Sie können jeden gültigen JavaScript-Ausdruck auf dem Tab Watch speichern.

Jetzt ausprobieren:

  1. Klicke auf den Tab Ansehen.
  2. Klicken Sie auf Hinzufügen Watch-Ausdruck hinzufügen.
  3. Geben Sie typeof sum ein.
  4. Drücken Sie die Eingabetaste. In den Entwicklertools wird „typeof sum: "string"“ angezeigt. Der Wert rechts neben dem Doppelpunkt ist das Ergebnis Ihres Ausdrucks.

Im Bereich „Watch-Ausdruck“

Dieser Screenshot zeigt den Tab Watch (Uhr) (unten rechts) nach dem Erstellen des Watchausdrucks typeof sum.

Wie vermutet, wird sum als String ausgewertet, es sollte aber eine Zahl sein. Sie haben nun bestätigt, dass dies die Ursache des Fehlers ist.

Methode 3: Die Konsole

Mit der Console können Sie nicht nur console.log()-Nachrichten aufrufen, sondern auch beliebige JavaScript-Anweisungen auswerten. In Bezug auf die Fehlerbehebung können Sie die Console verwenden, um mögliche Fehlerkorrekturen für Fehler zu testen. Jetzt ausprobieren:

  1. Wenn die Konsolenleiste nicht geöffnet ist, drücken Sie die Esc-Taste, um sie zu öffnen. Es wird am unteren Rand des Fensters „Entwicklertools“ geöffnet.
  2. Geben Sie in der Console parseInt(addend1) + parseInt(addend2) ein. Diese Anweisung funktioniert, da Sie in einer Codezeile, in der addend1 und addend2 enthalten sind, pausiert werden.
  3. Drücken Sie die Eingabetaste. Die Entwicklertools werten die Anweisung aus und geben 6 aus. Dies ist das Ergebnis, das Sie von der Demo erwarten.

Konsolenleiste nach der Auswertung der relevanten Variablen

Auf diesem Screenshot ist die Console-Leiste nach der Auswertung von parseInt(addend1) + parseInt(addend2) zu sehen.

Korrektur anwenden

Du hast eine Fehlerbehebung für den Fehler gefunden. Jetzt müssen Sie nur noch die Lösung ausprobieren. Bearbeiten Sie dazu den Code und führen Sie die Demo noch einmal aus. Du musst die Entwicklertools nicht verlassen, um die Korrektur anzuwenden. Du kannst JavaScript-Code direkt über die Benutzeroberfläche der Entwicklertools bearbeiten. Jetzt ausprobieren:

  1. Klicken Sie auf Fortsetzen Skriptausführung fortsetzen.
  2. Ersetzen Sie im Codeeditor Zeile 31 (var sum = addend1 + addend2) durch var sum = parseInt(addend1) + parseInt(addend2).
  3. Drücken Sie die Befehlstaste + S (Mac) oder Strg + S (Windows, Linux), um die Änderung zu speichern.
  4. Klicken Sie auf label_off Haltepunkte deaktivieren. Die Farbe ändert sich in Blau, um anzuzeigen, dass es aktiv ist. Wenn dieser Wert festgelegt ist, ignoriert die Entwicklertools alle von Ihnen festgelegten Haltepunkte.
  5. Probieren Sie die Demo mit verschiedenen Werten aus. Die Demo wird jetzt korrekt berechnet.

Nächste Schritte

In dieser Anleitung wurden nur zwei Möglichkeiten zum Einrichten von Haltepunkten beschrieben. Die Entwicklertools bieten viele andere Möglichkeiten, darunter:

  • Bedingte Haltepunkte, die nur ausgelöst werden, wenn die von Ihnen angegebene Bedingung erfüllt ist.
  • Haltepunkte für erkannte oder nicht abgefangene Ausnahmen.
  • XHR-Haltepunkte, die ausgelöst werden, wenn die angeforderte URL mit einem von Ihnen angegebenen Teilstring übereinstimmt.

Weitere Informationen dazu, wann und wie Sie die einzelnen Typen verwenden sollten, finden Sie unter Code mit Haltepunkten pausieren.

Es gibt einige Steuerelemente für Codeschritte, die in dieser Anleitung nicht erläutert wurden. Weitere Informationen finden Sie unter Schritt über Codezeile.