| [ 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.
Die schreibgeschtzte Eigenschaft stack des Objekts WebAssembly.Exception kann einen Stack-Trace enthalten.
Ein String mit dem Stack-Trace oder undefined, wenn kein Trace zugewiesen wurde.
Der Stack-Trace-String fhrt die Positionen der einzelnen Operationen auf dem Stack im WebAssembly-Format auf. Dieser menschenlesbare String enthlt die URL, den Namen des aufgerufenen Funktionstyps, den Funktionsindex und den Offset im Modul-Binrformat. Er hat ungefhr das folgende Format (weitere Informationen finden Sie in den Konventionen fr Stack-Traces der Spezifikation):
${url}:wasm-function[${funcIndex}]:${pcOffset}
Exceptions aus WebAssembly-Code enthalten standardmig keinen Stack-Trace.
Wenn WebAssembly-Code einen Stack-Trace bereitstellen soll, muss er eine JavaScript-Funktion aufrufen, um die Exception zu erzeugen, und dabei den Parameter options.traceStack=true an den Konstruktor bergeben.
Die virtuelle Maschine kann dann dem vom Konstruktor zurckgegebenen Exception-Objekt einen Stack-Trace hinzufgen.
Hinweis: Aus Performancegrnden werden Stack-Traces normalerweise nicht aus WebAssembly-Code bermittelt. Die Mglichkeit, diesen Exceptions Stack-Traces hinzuzufgen, ist fr Entwicklungswerkzeuge vorgesehen und wird fr den allgemeinen Einsatz nicht empfohlen.
Dieses Beispiel zeigt, wie eine Exception aus WebAssembly ausgelst wird, die einen Stack-Trace enthlt.
Betrachten Sie den folgenden WebAssembly-Code, der sich nach der Kompilierung in einer Datei namens example.wasm befindet.
Er importiert ein Tag, das er intern als $tagname bezeichnet, und eine Funktion, die er als $throwExnWithStack bezeichnet.
Er 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 dem WebAssembly-Modul bei der Instanziierung ber importObject bergeben.
Nach der Instanziierung des Moduls ruft der Code die exportierte WebAssembly-Methode run() auf, die sofort eine Exception auslst.
Anschlieend wird der Stack-Trace in 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 Exception erzeugt wird:
new WebAssembly.Exception(tag, [param], { traceStack: true });
Durch die bergabe von {traceStack: true} wird die virtuelle WebAssembly-Maschine angewiesen, dem zurckgegebenen WebAssembly.Exception einen Stack-Trace hinzuzufgen.
Andernfalls wre stack gleich undefined.
| Spezifikation |
|---|
| WebAssembly JavaScript Interface # dom-exception-stack |
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 |