Wie setze ich einen JavaScript-Haltepunkt aus Code in Chrome?

686

Ich möchte den Chrome-Debugger zwingen, in einer Zeile per Code zu brechen oder eine Art Kommentar-Tag wie so etwas zu verwenden console.break().

Paul
quelle
46
Haben Sie versucht debugger;oder nur reguläre Haltepunkte in der Entwickler-Symbolleiste verwendet?
Diaho
Sie meinen, Sie setzen Haltepunkte aus dem Code selbst, anstatt sie mit dem Skript-Watcher in den Entwicklertools festzulegen?
Faris M
2
Oder vielleicht besser: Legen Sie in Chrome einen Haltepunkt in XHR fest .
Felix Kling
9
Kein Duplikat. "in Chrome" und "in Code" sind zwei verschiedene Dinge, und diese Frage gilt für viele Nicht-XHR-Szenarien. Ja, 1 der Antworten in der anderen Frage beantwortet diese Frage, andere sind jedoch nicht zutreffend. Ich habe buchstäblich gegoogelt "Javascript-Haltepunkt von Code Chrome setzen" und dies ist das erste Ergebnis, und die andere Frage ist nicht einmal auf der ersten Seite.
AaronLS
Mögliches Duplikat programmgesteuerter Haltepunkte in Javascript?
Gerardo Lima

Antworten:

1158

Sie können debugger;innerhalb Ihres Codes verwenden. Wenn die Entwicklerkonsole geöffnet ist, wird die Ausführung unterbrochen. Es funktioniert auch in Firebug.

xn.
quelle
8
Ein schöner Trick ist es, den Debugger nach ein paar Sekunden auszulösen:setTimeout(function(){debugger;}, 3000);
Shahar
30
Ist der Timer-Trick gängige Praxis? Überprüfung / Begründung?
Justus Eapen
4
Das ist sehr hilfreich. Hinweis debugger;wird auch in allen gängigen Browsern unterstützt. Für weitere Informationen: w3schools.com/jsref/jsref_debugger.asp
ScottyG
16
@ ScottyG MDN ist weniger glänzend, nützlicher: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jpaugh
@JustusEapen Das Problem ist, dass Javascript Single-Threaded ist und daher den laufenden Code nicht unterbrechen kann.
Vitruvius
27

Richten Sie einen Button-Click-Listener ein und rufen Sie den an debugger;

Beispiel

$("#myBtn").click(function() {
 debugger;   
});

Demo

http://jsfiddle.net/hBCH5/

Ressourcen zum Debuggen in JavaScript

Martynas
quelle
1
Das setzt einen Haltepunkt im Klick-Handler, wahrscheinlich nicht das, was OP wollte
ᆼ ᆺ ᆼ
@PeterV Ich würde es nützlich finden, wenn ich nur versuchen würde, meinen Code an einem Ort zu öffnen, der sich in der Nähe eines Codeblocks befindet, den ich debuggte ... aber nicht die ganze Zeit debuggen wollte ... aber ja , wenn es nur darum geht, den Debugger zu öffnen ... dann gibt es dafür einen Tastendruck.
Armstrongest
27

Sie können auch verwenden debug(function), um zu brechen, wenn functionaufgerufen wird.

Befehlszeilen-API-Referenz: Debug

Beschützer eins
quelle
2
Sehr schön - scheint derzeit nur Chrome zu sein, aber das ist sowieso meine primäre Plattform. Jetzt muss ich nur noch daran denken, mein globales Debugging-Flag nicht mehr "debuggen" zu nennen ...
brichins
Die Chrome Debugger-Befehlszeilen-API-Referenz enthält tatsächlich einige andere recht hilfreiche Dinge, die mir nicht bekannt waren. Vielen Dank!
Peter T.
8

Wechseln Sie auf der Registerkarte "Skripte" zu Ihrem Code. Klicken Sie links neben der Zeilennummer auf. Dadurch wird ein Haltepunkt festgelegt.

Bildschirmfoto:

Screenshot des Haltepunkts in Chrom

Sie können dann Ihre Haltepunkte auf der rechten Registerkarte verfolgen (wie im Screenshot gezeigt).

Florian Margaine
quelle
41
Dies beantwortet die Frage nicht, er möchte es in Code
robertc
39
xn.: "Hier ist ein Bild meiner Antwort, als es noch ein kleines Baby mit 0 Stimmen war. Es ist jetzt alles erwachsen."
AaronLS
3
Wenn Sie ein JS-Skript mit einem Ajax-Aufruf laden, wird es hier nicht angezeigt, sodass ein Haltepunkt im Code erforderlich ist.
Petruza
@FlorianMargaine, Es gibt keine Registerkarte "Skripte" mehr. Bitte aktualisieren Sie das Bild.
Pacerier
In einigen Frameworks, wie z. B. Drupal, wird dem JS ein Cache-Busting-Abfragezeichenfolgensuffix hinzugefügt. Wenn Sie Caches leeren, wird dieses Suffix häufig aktualisiert, wodurch alle Haltepunkte gelöscht werden, die Sie beim vorherigen Laden festgelegt haben.
Nick
7

debugger ist ein reserviertes Schlüsselwort von EcmaScript und hat seit ES5 eine optionale Semantik

Infolgedessen kann es nicht nur in Chrome, sondern auch in Firefox und Node.js über verwendet werdennode debug myscript.js .

Der Standard sagt :

Syntax

DebuggerStatement :
    debugger ;

Semantik

Durch die Auswertung der DebuggerStatement-Produktion kann eine Implementierung einen Haltepunkt verursachen, wenn sie unter einem Debugger ausgeführt wird. Wenn ein Debugger nicht vorhanden oder aktiv ist, hat diese Anweisung keine beobachtbare Auswirkung.

Die Produktion DebuggerStatement: debugger; wird wie folgt bewertet:

  1. Wenn eine implementierungsdefinierte Debugging-Funktion verfügbar und aktiviert ist, dann
    1. Führen Sie eine implementierungsdefinierte Debugging-Aktion aus.
    2. Das Ergebnis sei ein implementierungsdefinierter Abschlusswert.
  2. Sonst
    1. Das Ergebnis sei (normal, leer, leer).
  3. Ergebnis zurückgeben.

Keine Änderungen in ES6.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle
3

Es ist möglich und es gibt viele Gründe, warum Sie dies tun möchten. Zum Beispiel das Debuggen einer Javascript-Endlosschleife kurz vor dem Beginn des Ladens der Seite, wodurch verhindert wird, dass das Chrome Developer Toolset (oder der Firebug) korrekt geladen wird.

Siehe Abschnitt 2 von

http://www.laurencegellert.com/2012/05/the-three-ways-of-setting-breakpoints-in-javascript/

Oder fügen Sie Ihrem Code am gewünschten Testpunkt einfach eine Zeile mit dem Wort Debugger hinzu.

user2539341
quelle
3

Haltepunkt: -

Der Haltepunkt wird nicht mehr ausgeführt und Sie können JavaScript-Werte untersuchen.

Nachdem Sie die Werte überprüft haben, können Sie die Ausführung des Codes fortsetzen (normalerweise mit einer Wiedergabetaste).

Debugger: -

Der Debugger; stoppt die Ausführung von JavaScript und ruft die Debugging-Funktion auf.

Die Debugger-Anweisung unterbricht die Ausführung, schließt jedoch keine Dateien und löscht keine Variablen.

Example:-
function checkBuggyStuff() {
  debugger; // do buggy stuff to examine.
};
Parth Raval
quelle
2

Es gibt viele Möglichkeiten, JavaScript-Code zu debuggen. Die folgenden zwei Ansätze werden häufig zum Debuggen von JavaScript über Code verwendet

  1. Verwenden Sie console.log()diese Option, um die Werte in der Browserkonsole auszudrucken. (Dies hilft Ihnen, die Werte an bestimmten Stellen Ihres Codes zu verstehen.)

  2. Debugger-Schlüsselwort. Fügen Sie debugger;die Speicherorte hinzu, die Sie debuggen möchten, öffnen Sie die Entwicklerkonsole des Browsers und navigieren Sie zur Registerkarte Quellen.

Weitere Tools und Möglichkeiten zum Debuggen von JavaScript-Code finden Sie unter diesem Link von W3School .

Keet Sugathadasa
quelle
1
+1 und die Verwendung von console.log ist auch hilfreich, um Ihren Code zu finden, da normalerweise die Datei / Zeilennummer neben der Nachricht angezeigt wird und Sie darauf klicken können, um Ihren Code im Debugger zu öffnen, einen Haltepunkt festzulegen usw.
John Henckel
0

Ich würde nicht empfehlen, debugger;wenn Sie nur den Javascript-Code töten und stoppen möchten, da debugger;Ihr Javascript-Code nur vorübergehend eingefroren und nicht dauerhaft gestoppt wird.

Wenn Sie Javascript-Code auf Ihren Befehl hin ordnungsgemäß beenden und stoppen möchten, verwenden Sie Folgendes:

throw new Error("This error message appears because I placed it");

S To
quelle