[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/Exception/stack [Back]  [Original]

WebAssembly.Exception.prototype.stack - WebAssembly | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

WebAssembly.Exception.prototype.stack

Disponibilit limite

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.

Dans cet article

Valeur

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}

Exemples

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).

wasm
(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.

js
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 :

js
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.

Spcifications

Spcification
WebAssembly JavaScript Interface
# dom-exception-stack

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page