Présentation

WebAssembly (WASM) s’exécute au sein d’une application de navigateur. Il ne s’agit pas d’un type d’application Datadog distinct. Le SDK Navigateur Datadog collecte les erreurs WASM en conservant le contexte du navigateur, et Datadog Error Tracking peut symboliser leurs trames de pile WASM à l’aide des informations de débogage DWARF téléversées.

Une seule erreur peut contenir à la fois des trames JavaScript et WASM. Téléversez les cartes sources JavaScript pour les trames JavaScript et les symboles WASM pour les trames WASM.

La symbolisation WebAssembly est en version bêta. Le plugin du SDK Navigateur et la datadog-ci wasm-symbols upload commande sont expérimentaux et peuvent changer.

Prérequis

Avant de téléverser des symboles, assurez-vous d’avoir :

  • Une application de navigateur configurée pour collecter les métadonnées de module WASM avec RUM, Browser Logs ou les deux.
  • Un fichier de symboles .wasm avec des sections de débogage DWARF intégrées et une section personnalisée build_id.
  • @datadog/datadog-ci version 5.23.0 ou ultérieure.

Générer des symboles de débogage

Configurez votre chaîne d’outils WASM pour générer :

  • Sections DWARF intégrées telles que .debug_info et .debug_line.
  • Une section personnalisée build_id. L’ID de build dans le fichier de symboles téléversé doit correspondre à l’ID de build dans le module chargé par le navigateur.

Par exemple, avec Emscripten :

emcc -g -Wl,--build-id <SOURCES> -o <OUTPUT>.js

Cette commande produit <OUTPUT>.js, le chargeur JavaScript, et <OUTPUT>.wasm, le binaire WebAssembly contenant les informations DWARF intégrées et la section personnalisée build_id.

Vous pouvez inspecter le module généré avec wasm-objdump :

wasm-objdump -h <OUTPUT>.wasm
wasm-objdump -j build_id -x <OUTPUT>.wasm

Conservez le fichier de symboles en tant qu’artefact de build afin de pouvoir le téléverser depuis votre pipeline CI.

Téléversez vos symboles

Installez l’interface de ligne de commande Datadog et configurez votre clé Datadog API ainsi que votre site :

npm install --save-dev @datadog/datadog-ci
export DATADOG_API_KEY=<DATADOG_API_KEY>
export DATADOG_SITE=

Activez les commandes bêta et téléversez soit un fichier .wasm, soit un répertoire. Lorsqu’un répertoire est indiqué, l’interface de ligne de commande le parcourt de manière récursive à la recherche de fichiers .wasm :

DD_BETA_COMMANDS_ENABLED=1 datadog-ci wasm-symbols upload /path/to/build

La commande ignore les fichiers qui ne contiennent pas à la fois des informations DWARF intégrées et une section personnalisée build_id. Utilisez --dry-run pour valider les fichiers de symboles sans les téléverser :

DD_BETA_COMMANDS_ENABLED=1 datadog-ci wasm-symbols upload /path/to/build --dry-run

Par défaut, Datadog conserve le premier fichier de symboles téléversé pour un ID de build. Utilisez --replace-existing lorsque vous devez le remplacer volontairement.

Le téléverseur ne résout pas une external_debug_info référence. Un module d'exécution qui ne contient que cette référence est ignoré. Téléversez un fichier de symboles qui contient des sections DWARF intégrées et la même build_id que le module d'exécution.

Comment les symboles sont mis en correspondance

Datadog utilise les métadonnées d’URL du module pour associer chaque trame de pile WASM à un module, puis fait correspondre le module à ses symboles téléversés via build_id. Contrairement aux source maps JavaScript, service et version ne font pas partie de la recherche de symboles WASM.

Vous pouvez consulter les fichiers téléversés sur la page RUM Debug Symbols.

Pour aller plus loin