| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/JavaScript_interface/Exception/stack | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern untersttzt werden und sich in Zukunft ndern oder entfernt werden knnen. Unter Umstnden kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.
Die stack-Eigenschaft im Nur-Lesen-Modus des WebAssembly.Exception-Objekts kann einen Stack-Trace enthalten.
Ein String, der den Stack-Trace enthlt, oder undefined, wenn kein Trace zugewiesen wurde.
Der Stack-Trace-String listet die Standorte jeder Operation auf dem Stack im WebAssembly-Format auf. Dies ist ein menschenlesbarer String, der die URL, den Namen des aufgerufenen Funktionstyps, den Funktionsindex und dessen Offset im Modul-Binrformat angibt. Er hat ungefhr dieses Format (siehe Stack-Trace-Konventionen in der Spezifikation fr weitere Informationen):
${url}:wasm-function[${funcIndex}]:${pcOffset}
Ausnahmen von WebAssembly-Code beinhalten standardmig keinen Stack-Trace.
Wenn WebAssembly-Code einen Stack-Trace bereitstellen muss, muss er eine JavaScript-Funktion aufrufen, um die Ausnahme zu erstellen, und dabei den Parameter options.traceStack=true im Konstruktor bergeben.
Die virtuelle Maschine kann dann einen Stack-Trace an das vom Konstruktor zurckgegebene Ausnahmeobjekt anhngen.
Hinweis: Stack-Traces werden normalerweise nicht von WebAssembly-Code gesendet, um die Leistung zu verbessern. Die Mglichkeit, Stack-Traces zu diesen Ausnahmen hinzuzufgen, wird fr Entwickler-Tools bereitgestellt und ist allgemein nicht fr eine breitere Verwendung empfohlen.
Dieses Beispiel zeigt, wie man eine Ausnahme von WebAssembly wirft, die einen Stack-Trace enthlt.
Betrachten Sie den folgenden WebAssembly-Code, der angenommen wird, in eine Datei namens example.wasm kompiliert zu werden.
Dies importiert ein Tag, das intern als $tagname bezeichnet wird, und importiert eine Funktion, die intern als $throwExnWithStack bezeichnet wird.
Es exportiert die Methode run, die von externem Code aufgerufen werden kann, um $throwExnWithStack aufzurufen.
(module
;; import tag that will be referred to here as $tagname
(import "extmod" "exttag" (tag $tagname (param i32)))
;; import function that will be referred to here as $throwExnWithStack
(import "extmod" "throwExnWithStack" (func $throwExnWithStack (param i32)))
;; call $throwExnWithStack passing 42 as parameter
(func (export "run")
i32.const 42
call $throwExnWithStack
)
)
Der folgende JavaScript-Code definiert ein neues Tag tag und die Funktion throwExceptionWithStack().
Diese werden an das WebAssembly-Modul im importObject bergeben, wenn es instanziiert wird.
Sobald das Modul instanziiert ist, ruft der Code die exportierte WebAssembly-Methode run() auf, die sofort eine Ausnahme wirft.
Der Stack wird dann aus der catch-Anweisung protokolliert.
const tag = new WebAssembly.Tag({ parameters: ["i32"] });
function throwExceptionWithStack(param) {
// Note: We declare the exception with "{traceStack: true}"
throw new WebAssembly.Exception(tag, [param], { traceStack: true });
}
// Note: importObject properties match the WebAssembly import statements.
const importObject = {
extmod: {
exttag: tag,
throwExnWithStack: throwExceptionWithStack,
},
};
WebAssembly.instantiateStreaming(fetch("example.wasm"), importObject)
.then((obj) => {
console.log(obj.instance.exports.run());
})
.catch((e) => {
console.log(`stack: ${e.stack}`);
});
// Log output (something like):
// stack: throwExceptionWithStack@http://<url>/main.js:76:9
// @http://<url>/example.wasm:wasm-function[3]:0x73
// @http://<url>/main.js:82:38
Der wichtigste Teil dieses Codes ist die Zeile, in der die Ausnahme erstellt wird:
new WebAssembly.Exception(tag, [param], { traceStack: true });
Die Angabe von {traceStack: true} teilt der WebAssembly-virtuellen Maschine mit, dass sie einen Stack-Trace an die zurckgegebene WebAssembly.Exception anhngen soll.
Ohne dies wre der Stack undefined.
Diese Funktion ist Teil keiner aktuellen Spezifikation.
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |