1

Häufig möchte ich beim Debuggen eine bestimmte Zeile anhalten, aber erst, nachdem eine andere Zeile ausgeführt wurde. Oft wurde dieser JavaScript-Code maschinell erzeugt (zum Beispiel von JSP oder PHP) oder sollte erstellt werden (z. B. von Grunt), was jedes Mal ein wenig nervig sein kann, wenn ich einen Haltepunkt hinzufügen möchte. Wie kann man in diesem Fall bei einer bestimmten Zeile anhalten?Wie kann ich nur an einem Haltepunkt anhalten, nachdem eine Zeile ausgeführt wurde?

Zum Beispiel, ich habe zwei Funktionen, f_a() und f_b(), die auf diese Weise aufgerufen werden:

for (var i = 0; i < 1000; i++) { 
    f_a(); 
} 

f_b(); 
f_a(); 

(Running example)

Ich mag einen Haltepunkt in f_a(), hinzufügen, aber nur halten an Diese Funktion wird nach f_b() aufgerufen. Wie geht das?

Antwort

2

Wir können folgendes tun:

  1. einen Haltepunkt f_b() hinzufügen.
  2. Machen Sie diesen Haltepunkt bedingt. Setzen Sie als Bedingung eine Variable (sagen wir pause_at_f_a) auf true. Wir wollen nicht innerhalb f_b() pausieren, also verwenden wir den Koma-Operator, um false zurückzugeben. Die Bedingung ist dann

    pause_at_f_a = true, false 
    

    Adding conditional breakpoint to like that should enable other breakpoint.

  3. einen Haltepunkt f_a() hinzufügen. Die Bedingung für diesen Haltepunkt sollte die Variable paused_at_f_a sein.

    Check for set variable on the breakpoint that should pause.

Eine mögliche Ärgernis ist, dass der Haltepunkt aktiviert wird bleiben, nachdem wir prüfen, was wir überprüfen möchten. Deshalb habe ich einen weiteren Schritt verwenden:

  1. Statt nur überprüft, ob die Variable true, ungesetzt es auch ist, wenn es wahr ist, verwenden Sie diese Bedingung:

    pause_at_f_a ? (pause_at_f_a = false, true) : false 
    

Die Bedingung kann alles sein. Man kann auch Zähler verwenden. Der Kern des Tricks besteht darin, einen Haltepunkt zum Setzen von Variablen zu verwenden. Hier ist das Ergebnis:

A debugging session with the trick.

+0

So beantwortet Sie Ihre eigene Frage innerhalb von 1 Minute? Scheint vernünftig. – Arg0n

+0

@ Arg0n - Das ist absolut akzeptabel: http://StackOverflow.com/Help/self-answer – RJM

+0

@RJM Oh, ich verstehe. Wusste ich nicht. – Arg0n

1

Sie auch debugger; in Ihrem Code schreiben können, und die Browser-Entwickler-Tools, werden an diesem Codezeile zu stoppen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger

+0

Ja, ich benutze es auch sehr, aber ich konnte es nur durch Bearbeiten des Quellcodes und erneutes Laden der Seite erreichen. Es ist der beste Weg, wenn das Skript einfach zu ändern ist, aber es kann kompliziert sein, wenn das Skript automatisch generiert wird oder viel Aufbau erfordert.Es ist ein häufiger Fall auf meiner Routine, leider ... – brandizzi

+0

BTW hier ist eine gute Frage: ist es möglich, den Code "on the fly" zu bearbeiten, um den 'Debugger' Befehl hinzuzufügen? – brandizzi

+0

Ich bin mir nicht sicher, ich würde es vermuten. Aber dann wäre es wahrscheinlich besser, nur Breakpoints in der Dev-Konsole zu setzen. – Joonas89

Verwandte Themen