Bedeutung von "DebuggeeWouldRun: debuggee` self-hosted: XXX 'würde ausgeführt "in der Firefox / Firebug-Konsole

687
user568458

In meiner Firebug-Konsole werden auf verschiedenen Websites zahlreiche Meldungen wie diese angezeigt, darunter auch eine, die ich zu debuggen versuche. breakOnError.jsEs scheint sich um eine System- / Firebug-Datei zu handeln, die nichts mit den Websites zu tun hat, für die dies angezeigt wird. Es gibt nichts offensichtliches, was ich sehen kann, auf das sich die Zahl 674 beziehen könnte, obwohl es auf mehreren Seiten (einschließlich dieser Frageseite) zu erscheinen scheint:

DebuggeeWouldRun: debuggee `self-hosted:674` would run breakOnError.js (line 105, col 13)` <system> 

Die Firebug-Konsole füllt sich einfach damit, wenn im Skriptfenster die Option " Break on Exceptions" aktiviert ist. Manchmal auch, wenn ich sie einschalte, nachdem die Seite bereits geladen wurde, mit einer Geschwindigkeit von etwas mehr als einer Sekunde. Es ist gelb wie eine Warnmeldung (es ist kein Fehler), aber ich weiß nicht, worüber es mich warnen könnte.

Bedeutung von

Ich kann keine verständlichen Informationen darüber finden, was das ist oder was es bedeutet. Nahezu relevant ist nur ein paar Probleme mit Firefox / Mozilla ( 1249469 und 1252945 ), die einige sehr genaue Details der Implementierung von ... besprechen, was auch immer das ist. Keine Anhaltspunkte kann ich verstehen, was dies eigentlich bedeutet.

Was ist das und was bedeutet es?


Ich habe eine mögliche Erklärung von jemandem gefunden, von dem ich glaube, dass er ein Mozilla-Entwickler ist, aber es ist sehr technisch (beabsichtigte Zielgruppe = andere Firefox-Entwickler) und ich verstehe nicht wirklich, was es wirklich bedeutet. Ich denke, das bedeutet vielleicht, dass Firefox sich beschwert, weil Firebug nicht versucht, die Pausenbehandlung zu übernehmen. Firebug reagiert auf diese Systemmeldungen als Konsolewarnungen und macht dann einfach weiter, was es getan hat.

Ich habe kürzlich eine Implementierung von Debugger.DebuggeeWouldRun gelandet. Dies ist ein Fehler, der ausgelöst wird, wenn der Debuggercode versucht, Debuggee-Code erneut einzugeben, ohne eine gesegnete "Aufruffunktion" (derzeit DFpeval und DOpexecuteInGlobal) zu durchlaufen 1 . Diese erneuten Einträge sind die Ursache dafür, dass der Debugger den Debuggee nicht wirklich anhalten kann.

Derzeit ist dies kein Fehler, sondern eine Warnung. Sie soll dazu beitragen, Websites im Debugger-Code zu identifizieren, die versuchen, Debuggee-Code erneut einzugeben. Die Absicht ist, dass, wenn alle Sites behoben sind, ein Fehler auftritt.

... dann gibt es diesen Kommentar, der mich denken lässt, dass dies vielleicht ein Symptom einer Firefox-Ausrede ist, über die ich mir keine Sorgen machen muss, aber wieder verstehe ich nicht wirklich, was es bedeutet, insbesondere was es bedeutet "Selbstbesinnung". Gehosteter Code "in diesem Zusammenhang (würde eine Erweiterung wie Firebug als selbst gehostet gelten, weil sie auf meinem Computer ist?), und ich habe keine Ahnung, was" das Debugee-Abteil "ist:

Ein aktuelles Manko ist, dass der gesamte selbst gehostete Code im Debuggee-Bereich verboten ist. Dies bedeutet, dass einige Operationen, die eigentlich erlaubt sein sollten, vor / nicht zugelassen werden.


Ramhound schlug in Kommentaren vor, es könnte sich um einen Firebug-Bug (ugghhh) handeln, und fragte nach der Codezeile, auf die in der Nachricht verwiesen wird.

Wenn es einen Fehler gibt, ist dies natürlich eine Angelegenheit für die Firebug-Entwickler. Dies ist nicht der Ort, an dem sie versuchen, den Fehler zu beheben. Ich poste, falls es jemandem hilft zu erklären, was der Inhalt der Nachricht ("debugee", "self-hosted: 674", "run run") eigentlich bedeutet. Dies ist die Funktion um die Zeile herum, ich habe Zeile 105 mit einem Kommentar markiert:

onDebuggerPaused: function(context, event, packet) { // Check the packet type, only "exception" is interesting in this case. var type = packet.why.type; if (type != "exception") return;  // Reset the break-on-next-error flag after an exception break happens. // xxxHonza: this is how the other BON implementations work, but we could reconsider it. // Another problem is that the debugger breaks in every frame by default, which // is avoided by reseting of the flag. this.breakOnNext(context, false);  // At this point, the BON flag is reset and can't be used anymore in |shouldResumeDebugger|. // So add a custom flag in packet.why so we know that the debugger is paused because of // either the Console's "Break On Next" or the Script's "Break On Exceptions" option. packet.why.fbPauseDueToBONError = true;  // Get the exception object. var exc = DebuggerLib.getObject(context, packet.why.exception.actor); if (!exc) return;  Trace.sysout("BreakOnError.onDebuggerPaused;", );  // Convert to known structure, so FirebugReps.ErrorMessage.copyError() works. var error = { message: exc + "", // <<<<<<<<<<<<<<<<<<<<<<<<<<<< THIS IS LINE 105 <<<<<<<<<<<<<<<< href: exc.fileName, lineNo: exc.lineNumber };  var lineNo = exc.lineNumber - 1; var url = exc.fileName;  // Make sure the break notification popup appears. context.breakingCause = { message: error.message, copyAction: Obj.bindFixed(ErrorMessage.copyError, ErrorMessage, error), skipAction: function addSkipperAndGo() { // Create a breakpoint that never hits, but prevents BON for the error. var bp = BreakpointStore.addBreakpoint(url, lineNo); BreakpointStore.disableBreakpoint(url, lineNo);  Debugger.resume(context); }, }; }, 
3
Das hört sich nach einem JavaScript-Fehler in Firebug an. Ramhound vor 7 Jahren 1
Oh bugger, ein Javascript-Fehler in meinem Javascript-Debugger. Wo ist mein Javascript-Debugger-Debugger ... user568458 vor 7 Jahren 2
Also wirft etwas eine Ausnahme aus, ich nehme an, Zeile 105, von breakonError.js enthält keine Hinweise? Typisch mit Ausnahmecode. Ramhound vor 7 Jahren 0
@Ramhound Ich habe den Code hinzugefügt. Ich könnte falsch liegen, aber ich glaube nicht, dass diese Zeile abstürzt oder ausfällt. Ich denke, Zeile 105 dieses Firebug-Codes ist einfach der Code, der die Warnmeldung generiert. Es scheint, als würde es versuchen, mir etwas über Firebugs aktuellen Status zu erzählen ... Ich weiß nur nicht was. user568458 vor 7 Jahren 0

1 Antwort auf die Frage

3
Sebastian Zartner

Der "Debuggee" ist die Sache, die debuggt wird. Bei Firefox wird JavaScript-Code durch den Debugger ausgeführt, genauer gesagt der JavaScript-Code der Website. (Es kann sich auch um einen browserinternen JavaScript-Code handeln.)

Die Firefox-Debugger-API ist in MDN beschrieben, obwohl sie auch sehr technisch ist und die Terminologie nicht erläutert. Es gibt auch einige Beschreibungen der Debugger.DebuggeeWouldRunAusnahme, die die Dinge ein wenig klarer machen, wenn Sie die Definition von oben beachten:

Bei einigen Debugger-Vorgängen, die einfach den Status des Debugger zu prüfen scheinen, kann tatsächlich Debuggee-Code ausgeführt werden. Beim Lesen einer Variablen kann beispielsweise eine Getter-Funktion für den globalen oder einen Operanden mit Ausdruck ausgeführt werden. Beim Abrufen der Eigenschaftsbeschreibung eines Objekts wird ein Handler-Trap ausgeführt, wenn das Objekt ein Proxy ist. Um die Integrität des Debuggers zu schützen, können nur Methoden, deren angegebener Zweck darin besteht, Debuggee-Code auszuführen, dies tun. Diese Methoden werden als Aufruffunktionen bezeichnet und folgen bestimmten allgemeinen Konventionen, um das Verhalten des Debugge sicher zu melden. Wenn bei anderen Methoden der normale Betrieb die Ausführung von Debuggee-Code zur Folge haben würde, wird eine Instanz der Debugger.DebuggeeWouldRun-Ausnahme ausgelöst.

Wenn Sie dies auf Firebug anwenden, bedeutet dies, dass der Debugger-Code von Firebug nicht nur den Code einer Seite überprüft, sondern möglicherweise (versehentlich) den Code der Seite ausführen kann. Einfaches Beispiel:

<script> var obj = { i: 0,  get counter() { return this.i++; } } </script> 

Dies erhöht sich bei ijedem Aufruf von obj.counter Getter . Wenn Sie die inspizieren objVariable innerhalb Firebug - Uhr - Seitenwand, zum Beispiel, werden Sie sehen, dass der Zähler gets erhöht, nur weil es von Firebug zugegriffen wird :

Mehrwert durch Aufruf eines Getters

Allerdings sehe ich die von Ihnen erwähnten Ausnahmen nicht, auch wenn die Einstellungen javascript.options.throw_on_debuggee_would_runund javascript.options.dump_stack_on_debuggee_would_run, wie im Mozilla-Diskussionsgruppen-Thread erwähnt, auf festgelegt sind true(die falsestandardmäßig festgelegt sind).
Ich empfehle Ihnen , diese beiden Einstellungen auf festzulegen, falsewenn diese Ausnahmen nicht an der Konsole protokolliert werden sollen.

Tolle Antwort, danke. Irgendeine Idee, was "selbst gehostet: 674" sein könnte? Ich vermute, die 674. js-Datei, die Firefox von meinem eigenen Computer liest und daher Teil von Firebug ist. und die anderen 673 sind verschiedene Teile von Firefox selbst, Firebug und anderen Firefox-Erweiterungen? user568458 vor 7 Jahren 1
Es gibt [einige Beschreibung in MDN über die Bedeutung von "selbst gehostet"] (https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/self-hosting), wenn auch wieder sehr technisch. Es sieht so aus, als würde selbst gehosteter Code einen Browser-internen Code bedeuten, obwohl ich der Meinung bin, dass die richtige Person [Till Schneidereit] (https://developer.mozilla.org/en-US/profiles/tschneidereit) derjenige ist, der das geschrieben hat Artikel. Gemäß dem [Code, der die Ausnahme auslöst] (https://dxr.mozilla.org/mozilla-central/source/js/src/vm/Debugger.cpp#358) ist "674" die Zeilennummer in dieser Datei. Sebastian Zartner vor 7 Jahren 1