Ich debugge eine Javascript-App (mit Chrome-Entwicklungstools) und möchte einige Variablenwerte ändern, während ich durch den Code gehe.
Ist das überhaupt möglich?
Ich habe versucht und so 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 ...
modeline
kommt das?Antworten:
Warum erhält diese Antwort immer noch positive Stimmen?
Per Mikaël Mayers Antwort , dann ist dies kein Problem mehr, und meine Antwort ist veraltet (
go()
jetzt zurückkehrt ,30
nachdem er mit der Konsole Ausmisten). Dies wurde im Juli 2013 festgelegt, nach dem Bericht Fehler in oben verlinkten gabrielmaldi Kommentar . Es alarmiert mich, dass ich immer noch Upvotes bekomme - lässt mich denken, dass der Upvoter weder die Frage noch meine Antwort versteht.Ich werde meine ursprüngliche Antwort hier aus historischen Gründen verlassen, aber gehe upvote Mikaël Antwort statt .
Der Trick besteht darin, dass Sie eine lokale Variable nicht direkt ändern können, sondern die Eigenschaften eines Objekts ändern können. 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 festgelegt und diese Aufrufe in der Konsole ausgeführt haben, und Sie werden feststellen, dass das Ergebnis 20 statt 0 ist (aber leider nicht 30).quelle
1
wird protokolliert. Was ist der Fehler? Was haben Sie erwartet, um protokolliert zu werden?a
in einenDies ist jetzt in Chrom 35 möglich (heute ab 11. Juli 2014). Ich weiß allerdings nicht, welche Version es zuerst erlaubt hat.
Habe gerade @ gilly3 Beispiel auf meinem Computer getestet und es funktioniert.
Öffnen Sie die Konsole in
Sources
und die RegisterkarteSnippets
, fü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 und klicken Sie auf "Ausführen" (die Funktion wird jedoch nicht ausgelöst).
go()
und das zurückgegebene Ergebnis
g_n + n + o.n
ist 30.quelle
Dies ist ein anerkannter Fehler in den Chrome Dev Tools:
http://code.google.com/p/chromium/issues/detail?id=124206
quelle
Ja! Schließlich! Ich habe es gerade mit Chrome, Version 66.0.3359.170 (Official Build) (64-Bit) auf dem Mac versucht.
Sie können die Werte in den Bereichen wie im ersten Bild oder mit der Konsole wie im zweiten Bild ändern.
quelle
Es sieht so aus als nicht.
Setzen Sie einen Haltepunkt. Wenn der Schalter nicht mehr zur Konsole wechselt, versuchen Sie, die Variable festzulegen. Es tritt kein Fehler auf, wenn Sie ihm einen anderen Wert zuweisen. Wenn Sie ihn jedoch nach der Zuweisung lesen, bleibt er unverändert. : - /
quelle
Firebug scheint Ihnen das zu erlauben.
quelle
Tatsächlich gibt es eine Problemumgehung. Kopieren Sie die gesamte Methode, ändern Sie ihren Namen, z. B. originalName (), in originalName2 (), ändern Sie jedoch die darin enthaltene Variable, um den gewünschten Wert anzunehmen, oder übergeben Sie sie als Parameter.
Wenn Sie diese Methode dann direkt von der Konsole aus aufrufen, hat sie dieselbe Funktionalität, Sie können jedoch die Variablenwerte ändern.
Wenn die Methode automatisch aufgerufen wird, geben Sie stattdessen in die Konsole ein
originalName = null; function originalName(original params..) { alert("modified internals"); add whatever original code you want }
quelle
Ich kann einen Wert für eine Skriptvariable durch Zuweisung in der Konsole ändern. Scheint am einfachsten.
quelle
Ich weiß nicht, warum das Chrome-Team diese alberne Funktion nicht zulässt ... aber die einzige Möglichkeit, Variablenwerte mit Erfolg zu ändern, besteht darin, das Skript direkt im Chrome-Editor auf der Registerkarte "Quellen" zu ändern (dies ändert das Verhalten von Ihr Skript, bis Sie die Seite aktualisieren), aber diese Änderungen gehen beim Aktualisieren verloren. Seien Sie also vorsichtig.
quelle
Ich hatte das gleiche Problem, ging zu "Über Google Chrome" -> Hilfe und sagte, ich müsse meinen Browser neu starten, um die neuesten Updates zu erhalten.
Ich habe dies getan und plötzlich kann ich jetzt lokale Variablen ändern. Klicken Sie einfach im Fenster Bereichsvariablen auf die Variable, die Sie bearbeiten möchten, und geben Sie Ihren neuen Wert ein.
Ich bemerkte jedoch einige Kuriositäten, dass ich einige nicht verwandte Variablenzuweisungen übergehen musste, bevor ich den Text im rechten Fenster ändern konnte (Bereichsvariablen).
quelle
So ändern Sie einen Wert jedes Mal, wenn ein Codeblock ausgeführt wird, ohne den Ausführungsfluss unterbrechen zu müssen :
Mit der Funktion "Logpoints" im Debugger können Sie beliebige Werte in der Konsole protokollieren, ohne sie zu beschädigen. Es wertet Code innerhalb des Ausführungsflusses aus, was bedeutet, dass Sie ihn tatsächlich verwenden können, um Werte im laufenden Betrieb zu ändern, ohne anzuhalten.
Klicken Sie mit der rechten Maustaste auf eine Zeilennummer, wählen Sie "Logpoint" und geben Sie den Zuweisungsausdruck ein. Es sieht ungefähr so aus:
Ich finde es sehr nützlich, um Werte auf einen Zustand zu setzen, der ansonsten nicht einfach zu reproduzieren ist, ohne mein Projekt mit Debug-Zeilen neu erstellen zu müssen. Denken Sie daran, den Haltepunkt zu löschen, wenn Sie fertig sind!
quelle