| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/Exception/stack | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utiliss.
La proprit en lecture seule stack, rattache une instance d'Exception peut contenir une trace de pile d'appels pour une exception leve par du code WebAssembly.
Par dfaut, les exceptions leves par du code WebAssembly n'incluent pas la pile d'appels. Si le code WebAssembly doit fournir une pile d'appels, il doit appeler une fonction JavaScript pour crer l'exception et passer le paramtre options.traceStack=true au constructeur. La machine virtuelle peut ensuite attacher la pile d'appels l'exception lorsqu'elle est leve.
Note : Les traces de pile d'appels ne sont pas envoyes par dfaut depuis du code WebAssembly afin d'amliorer les performances. La possibilit d'ajouter les traces de pile d'appels ces exceptions est un outil pour le dveloppement, il ne s'agit pas d'une pratique recommande plus largement.
Une chane de caractres DOMString contenant la pile d'appels, ou undefined si aucune trace n'a t affecte.
La chane de caractres dcrivant la pile d'appels liste les emplacements de chaque opration de la pile, au format WebAssembly. Il s'agit d'une chane de caractres, lisible par un humain, qui indique l'URL, le nom du type de fonction appel, l'indice de la fonction et son dcalage au sein du module binaire. Elle a approximativement ce format (voir les conventions quant la pile d'appels dans la spcification pour plus d'informations) :
${url}:wasm-function[${funcIndex}]:${pcOffset}
Dans l'exemple qui suit, on illustre comment lever une exception depuis du code WebAssembly et qui contient une trace de pile d'appels.
Prenons le code WebAssembly suivant et supposons qu'il soit compil dans un fichier intitul exemple.wasm. On y importe une balise laquelle on fait rfrence, en interne, avec $tagname et on importe une fonction laquelle on fait rfrence avec $throwExnWithStack. Ce module exporte la mthode run1 qui peut tre appele depuis le code externe afin d'appeler $throwExnWithStack (et donc la fonction JavaScript).
(module
;; On importe la balise laquelle on fera rfrence avec $tagname
(import "extmod" "exttag" (tag $tagname (param i32)) )
;; On importe la fonction laquelle on fera rfrence avec $throwExnWithStack
(import "extmod" "throwExnWithStack" (func $throwExnWithStack (param i32) ) )
;; On appelle $throwExnWithStack en passant 42 comme paramtre
(func (export "run1")
i32.const 42
call $throwExnWithStack
)
)
Le code JavaScript qui suit dfinit une nouvelle balise tag et la fonction throwExceptionWithStack. Ceux-ci sont passs au module WebAssembly via importObject lors de son instanciation.
Une fois le fichier instanci, le code appelle la mthode WebAssembly run1(), qui dclenchera immdiatement l'exception. La pile d'appels est alors affiche dans la console dans l'instruction catch.
let tag = new WebAssembly.Tag({ parameters: ["i32"] });
let throwExceptionWithStack = (param) => {
// Note : on dclare l'exception avec '{traceStack: true}'
throw new WebAssembly.Exception(tag, [param], { traceStack: true });
};
// Note : les proprits d'importObject correspondent aux instructions d'import WebAssembly.
const importObject = {
extmod: { exttag: tag, throwExnWithStack: throwExceptionWithStack },
};
WebAssembly.instantiateStreaming(fetch("exemple.wasm"), importObject)
.then((obj) => {
console.log(obj.instance.exports.run1(12)); // On ne fait rien avec la valeur passe
})
.catch((e) => {
console.log(`stack : ${e.stack}`);
});
// Affichera dans la console quelque chose comme :
// stack: throwExceptionWithStack@http://<url>/main.js:76:9
// @http://<url>/exemple.wasm:wasm-function[3]:0x73
// @http://<url>/main.js:82:38
La partie la plus intressante du code est ici la ligne o l'exception est cre :
new WebAssembly.Exception(tag, [param], { traceStack: true });
En passant {traceStack: true}, on indique la machine virtuelle WebAssembly qu'il faut attacher la pile d'appels l'exception. Sans cette option, la proprit portant la pile aurait valu undefined.
| Spcification |
|---|
| WebAssembly JavaScript Interface # dom-exception-stack |
Cette page a t modifie le 4 sept. 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |