Ist es möglich, Javascript-Variablenwerte während des Debuggens in Google Chrome zu ändern?

Lesezeit: 5 Minuten

Benutzer-Avatar
Tätowierung

Ich debugge eine Javascript-App (mit Chrome-Entwicklungstools) und möchte einige Variablenwerte ändern, während ich den Code schrittweise durchlaufe.

Ist das überhaupt möglich?

Ich habe versucht und bekam etwas wie:

> modeline
1
> modeline=0
0             <<< seems to work but... 
> modeline
1             <<< ups!!

Aber ich kann keine Dokumentation finden, die besagt, was getan werden kann oder nicht …

  • Poste einen Code. Wo tut modeline kommt von?

    – Emil Iwanow

    5. Januar 2011 um 10:28 Uhr

  • @Emil: Ist das wichtig? modeline ist eine globale Variable, ich habe auch versucht, sie mit window.modeline mit denselben Ergebnissen zu ändern. Aber diese Frage ist auch für lokale Variablen relevant, die innerhalb einer Funktion deklariert werden

    – Tätowierung

    5. Januar 2011 um 10:37 Uhr

  • Ich kann dieses Verhalten bestätigen. Das Ändern einer Eigenschaft eines JS-Objekts in Chrome scheint keine Auswirkungen auf den tatsächlichen Wert des Objekts im Interpreter zu haben. In Firefox führt dieselbe Änderung dazu, dass das js-Skript anders ausgewertet wird, als Sie es erwarten würden. Eine Art zusätzliche Sicherheit in Chrome? Weiß jemand, ob es in Chrome deaktiviert werden kann, damit Sie es zum Debuggen von js verwenden können?

    – Nikolaj Hansen

    11. November 2012 um 10:46 Uhr

  • Eingereicht a Fehlerbericht dafür.

    – Grüner Riese

    28. November 2012 um 22:14 Uhr

  • Bereits in V8 implementiert: Ausgabe 2399 Jetzt müssen die Entwicklertools von Chromium aktualisiert werden: Ausgabe 124206

    – gabrielmaldi

    21. März 2013 um 17:55 Uhr


Benutzer-Avatar
Michael Mayer

Warum erhält diese Antwort immer noch Upvotes?

Nach all den Jahren gibt es eine bessere Antwort als diese, und ich stimme ihr zu, da ich sie ständig verwende. Stimmen Sie stattdessen der Antwort von Tyler Collier zu. Sie erklären, dass Sie Werte entweder in der Konsole oder im Stack-Trace ändern können. Kein Trick nötig.


Veraltete Antwort

Dies ist jetzt in Chrom 35 möglich (heute Stand 11. Juli 2014). Ich weiß jedoch nicht, welche Version es zuerst erlaubt hat.

Ich habe gerade das @gilly3-Beispiel auf meiner Maschine getestet und es funktioniert.

  • Öffnen Sie die Konsole, hinein Sources und die Registerkarte Snippetsfügen Sie ein neues Snippet hinzu und fügen Sie den folgenden Code ein:

    var g_n = 0; function go() { var n = 0; var o = { n: 0 }; return g_n + n + o.n; // breakpoint here }

  • Klicken Sie mit der rechten Maustaste auf den Snippet-Namen, klicken Sie auf „Ausführen“ (dies löst die Funktion jedoch nicht aus).

  • Fügen Sie den Haltepunkt bei der return-Anweisung hinzu.

  • Geben Sie in der Konsole unten ein go()

  • und ändern Sie die Variablenwerte wie unten gezeigt

Funktion mit lokaler Änderung erlaubt.

und das zurückgegebene Ergebnis g_n + n + o.n ist 30.

  • Die Regression dieses Fehlers wird verfolgt die Verbindung bereitgestellt in Brians Antwort.

    – Mike

    29. März 2016 um 17:35 Uhr

  • Chrome lässt mich keinen Haltepunkt im Snippet setzen.

    – David Klempfner

    10. Juli 2021 um 7:24 Uhr

Benutzer-Avatar
gilly3

Warum erhält diese Antwort immer noch Upvotes?

Laut Mikaël Mayers Antwort ist dies kein Problem mehr und meine Antwort ist veraltet (go() kehrt jetzt zurück 30 nach dem Misten mit der Konsole). Dies wurde laut der im Juli 2013 behoben Fehlerbericht oben in Gabrielmaldis Kommentar verlinkt. Es beunruhigt mich, dass ich immer noch Upvotes bekomme – lässt mich glauben, dass der Upvoter weder die Frage noch meine Antwort versteht.

Ich werde meine ursprüngliche Antwort aus historischen Gründen hier lassen, aber Stimmen Sie stattdessen Mikaëls Antwort zu.


Der Trick besteht darin, dass Sie eine lokale Variable nicht direkt ändern können, aber Sie können die Eigenschaften eines Objekts ändern. Sie können auch den Wert einer globalen Variablen ändern:

var g_n = 0;
function go()
{
    var n = 0;
    var o = { n: 0 };
    return g_n + n + o.n;  // breakpoint here
}

Konsole:

> g_n = 10
  10
> g_n
  10
> n = 10
  10
> n
  0
> o.n = 10
  10
> o.n
  10

Überprüfen Sie das Ergebnis von go() Nachdem Sie den Haltepunkt gesetzt und diese Aufrufe in der Konsole ausgeführt haben, werden Sie feststellen, dass das Ergebnis 20 und nicht 0 ist (aber leider nicht 30).

  • 19.01.2016 Neuester, trivialer Chrome-Code (var a = 1; Debugger; console.log(a);) der Fehler ist immer noch vorhanden …

    – Firmmo

    19. Januar 2016 um 13:18 Uhr

  • @Firmo – 1 wird protokolliert. Was ist der Fehler? Was hast du erwartet, dass es protokolliert wird?

    – gilly3

    22. Januar 2016 um 0:38 Uhr

  • Ändern Sie bei geöffnetem Debugger den Wert von a zu irgendetwas (z. B. 42) im Bereich “Bereich” dann fortsetzen: 1 wird protokolliert

    – Firmmo

    22. Januar 2016 um 10:36 Uhr

  • @Offfirmo – nicht für mich: Bildschirmfoto. Aber wenn ich es in eine Funktion packe, dann sehe ich, was Sie beschreiben. Interessant. Aber dann kann ich den Wert ändern, indem ich ihn direkt in die Konsole eingebe (was ich persönlich einfacher finde als die Verwendung des Scope-Panels). Bildschirmfoto Ich glaube, ich habe nie versucht, Werte im Scope-Panel zu ändern. Ich führe immer nur Ausdrücke in der Konsole aus, die den Wert ändern, und das scheint zu funktionieren, egal was passiert.

    – gilly3

    5. Februar 2016 um 21:40 Uhr

  • Ich habe positiv gestimmt, weil Ihre Antwort alle Kriterien einer “guten Antwort” erfüllt. und Sie erwähnen eine andere Antwort, die neuere, bessere Informationen enthält, die – ausgehend von einer akzeptierten Antwort – ihr sofortige Glaubwürdigkeit verleihen. So danke. Und genieße die Upvotes!

    – Gfullam

    15. Dezember 2016 um 16:59 Uhr

Ja! Endlich! Ich habe es gerade mit Chrome, Version 66.0.3359.170 (Official Build) (64-Bit) auf dem Mac ausprobiert.

Sie können die Werte in den Bereichen wie im ersten Bild oder mit der Konsole wie im zweiten Bild ändern.

Änderungswerte des Chrome-Debuggers

Geben Sie hier die Bildbeschreibung ein

  • Das scheint auch für komplexe Situationen (wie Intervalle und Trigger) zu funktionieren.

    – ESP32

    7. März 2020 um 17:32 Uhr

  • Die Aktualisierung über die Konsole funktioniert bei mir auch auf Firefox Version 100.01 (64-Bit).

    – CAMD_3441

    20. Mai um 13:38 Uhr

Dies ist ein anerkannter Fehler in den Chrome Dev Tools:

http://code.google.com/p/chromium/issues/detail?id=124206

Es sieht so aus, als ob nicht.

Setzen Sie einen Haltepunkt, wenn es aufhört, wechseln Sie zur Konsole, versuchen Sie, die Variable zu setzen. Es tritt kein Fehler auf, wenn Sie ihm einen anderen Wert zuweisen, aber wenn Sie es nach der Zuweisung lesen, ist es unverändert. :-/

  • Ok … zumindest sehen Sie das gleiche Verhalten, das ich sehe. Aber … ist es möglich?

    – Tätowierung

    5. Januar 2011 um 10:50 Uhr

Benutzer-Avatar
Bobo

Firebug scheint Ihnen das zu ermöglichen.

  • Ok … zumindest sehen Sie das gleiche Verhalten, das ich sehe. Aber … ist es möglich?

    – Tätowierung

    5. Januar 2011 um 10:50 Uhr

Benutzer-Avatar
Jeff Lowery

Ich kann einen Skriptvariablenwert durch Zuweisung in der Konsole ändern. Scheint am einfachsten.

1187140cookie-checkIst es möglich, Javascript-Variablenwerte während des Debuggens in Google Chrome zu ändern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy