Ich habe meiner Javascript-Datei (jaydata.js) einen Haltepunkt hinzugefügt und auf "Schritt zum nächsten Funktionsaufruf" geklickt. Als es zu einer Zeile kam, die war:
},
Eine weitere Datei mit dem Titel "[VM] (8312)" wurde angezeigt. Ich habe immer wieder auf "Zum nächsten Funktionsaufruf wechseln" geklickt und jetzt ist mein Bildschirm:
Was sind diese seltsamen und mysteriösen Skripte mit dem Titel "[VM] (XXXX" und woher kommen sie?
debugging
google-chrome-devtools
AllieCat
quelle
quelle
Antworten:
[VM] (scriptId)
hat keine besondere Bedeutung. Es ist ein Dummy-Name, der uns hilft, Code zu unterscheiden, der nicht direkt mit einem Dateinamen verknüpft ist, z. B. miteval
und Freunden erstellter Code .In der Vergangenheit wurden alle diese Skripte nur beschriftet
(program)
.Wenn Sie interessiert sind, schauen
"[VM]"
Sie einfach im Quellcode von Chromium nach . Sie werden feststellen, dass diese Zahlen außerhalb der Entwicklertools keine signifikante Bedeutung haben.Update 25.06.2015
[VM] (scriptId)
wurde vor einigerVMscriptId
Zeit umbenannt und hier ist der direkte Link zum Suchergebnis, falls sich der Wert erneut ändert.quelle
[VM] (scriptId)
wurde vor einigerVMscriptId
Zeit umbenannt , aber ich habe die Antwort in ihrem aktuellen Zustand beibehalten, um die Frage nicht ungültig zu machen. Die neueste Codesearch Link lautet: cs.chromium.org/%22VM%5C%22%20+%22 (direkter Link Ergebnis , falls die Suche der Wert ändert sich wieder: chromium.googlesource.com/chromium/blink/+/... )Wenn Sie HTML-Inhalte über AJAX laden und diese Inhalte
<script>
Tags enthalten, wird das Skript mit eval () ausgewertet und in der Quellenansicht von Chrome als neue Datei erkannt, die mit "VM" beginnt. Sie können jederzeit zur Registerkarte Netzwerk wechseln, die AJAX-Anforderung suchen und die HTML-Antwort in ihrer Gesamtheit einschließlich Ihres Skripts anzeigen.quelle
src=/test.js
dann einen Fehler verursache, der auf test.js zurückgeht, enthält der Traceback den richtigen Dateinamen, danach enthalten Stacktraces die VM-Magie. Dies macht es unmöglich, den Quellcode [vom selben Ursprung] für die Dateien im Stacktrace mehr als einmal abzurufen, und Sie können sie nicht zwischenspeichern, da Sie nicht wissen, welche Datei in zukünftigen Stacktraces welche ist. Dies ist in Dev Tools behoben, jedoch nicht in Webanwendungen.Bei Verwendung von eval wird das Javascript in die Chrome Debugger-VMs geworfen. Um js anzuzeigen, die mit eval unter Chrome Debugger Sources erstellt wurden, setzen Sie dieses Attribut am Ende (danke Splaktar) des js:
Ist es möglich, dynamisches Laden von JavaScript mit einem Debugger wie WebKit, FireBug oder IE8 Developer Tool zu debuggen?
quelle
Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
Wenn Sie programmgesteuert injizierte JS-Dateien in Chrome debuggen möchten, können Sie die
debugger;
Anweisung verwenden. Dies ist schneller als das Auffinden, wo sich Ihr Skript befindet, und auch schneller als das Generieren einer Datei mit sourceurl .Es funktioniert wie ein Haltepunkt und lokalisiert Ihren Code automatisch auf der Registerkarte "Chrome-Quelle", wo immer Sie die
debugger;
Anweisung verwenden.Beachten Sie, dass die Quelle des Skripts eine VMXXX-Datei ist.
quelle
debugger;
Aussage kann er entmystifizieren, woher die mysteriösen 'seltsamen und mysteriösen Skripte mit dem Titel "[VM] (XXXX"' kommen, wenn er dies wünscht.Ich habe festgestellt, dass VM von einigen Chrome-Erweiterungen generiert wird - sie fügen CSS / JS in die Seite ein und Chrome verwendet die VM-Dateien, um sie auszuführen.
quelle
Wenn Sie eine untergeordnete Fensterquelle (iframe) debuggen, die anschließend entladen wird, erhält Ihre Quelldatei auch das VM-Präfix und den gelben Hintergrund.
quelle
Ich bin auf das gleiche Problem gestoßen. Das Problem ist, dass der Code meiner App versehentlich als Blackbox angesehen wurde. Als ich versuchte, in den Code einzusteigen, wurden diese
VMXXXX
Registerkarten immer wieder geöffnet .Nachdem ich die Blackbox-Einstellung für die js-Datei meiner App entfernt hatte, konnte ich meinen Code erfolgreich durchgehen.
quelle
um dies zu verhindern
Und dann Blackbox
^.*blackbox-this.js$
Gleiches gilt für setInterval / setTimeout, wenn es einen String bekommt (aber das ist sowieso eine schlechte Praxis, oder ?;))
Funktioniert das für dich?
quelle
Ich hatte das gleiche Problem beim Debuggen meiner Winkelanwendung. Es dauerte wirklich lange, bis zu viele VM-Skripte angezeigt wurden, die nicht in einer Blackbox gespeichert werden konnten. Ich habe mich lieber für Mozilla / IE Explorer entschieden, um zu debuggen.
quelle