Clause
← Toute la documentation

L'original anglais a changé depuis cette traduction ; certaines parties peuvent donc être obsolètes. Lire en anglais

Traduit de l'original anglais · 1e3a39c8-dirty · 2026-10-26

Déboguer les exécutables

-g émet des tables de lignes du source Erlang. Elles fonctionnent à tous les niveaux d'optimisation et avec --emit, l'édition de liens positionnelle -o et les cibles de projet.

Tables de lignes

Édition de liens

-g passe -g au pilote Clang. Les cibles MSVC écrivent aussi un PDB que l'exécutable nomme par son seul nom de fichier (/PDBALTPATH:%_PDB%) ; il est publié à côté de l'exécutable sous le nom <name>.pdb, après l'exécutable, dans la même publication différée. Les exécutables ELF gardent le DWARF en interne. Les exécutables Mach-O nécessiteraient dsymutil sur les objets préparés avant la suppression du répertoire de préparation ; ce n'est pas exécuté, donc les exécutables macOS perdent leurs tables de lignes à l'édition de liens.

Pile d'appels Erlang

Le code généré passe d'une fonction à l'autre par des transferts terminaux via la pile du processus (modèle d'exécution), de sorte qu'une trace de pile native montre la fonction Erlang courante puis l'ordonnanceur (ProcessStack::run, Executor::work). Les cadres Erlang du processus arrêté sont affichés par la fonction d'aide du runtime clause::runtime::debug_erlang_stack(), le plus interne en premier, sous la forme module:function/arity ; elle lit le processus en cours d'exécution du thread et les noms compilés des cadres, jamais les tables d'atomes du runtime :

(lldb) breakpoint set --file debug.erl --line 8
(lldb) run
* thread #1, stop reason = breakpoint 1.1
    frame #0: debug.exe`leaf at debug.erl:8
(lldb) expr -- clause::runtime::debug_erlang_stack()
  debug:leaf/1
  debug:middle/1
  debug:main/1

GDB écrit l'appel call clause::runtime::debug_erlang_stack() après set language c++ (les cadres du code Erlang n'ont pas de langage dans lequel GDB analyse les noms C++). Il nomme les cadres twice () at /path/debug.hrl:5. Les exécutables -Os peuvent supprimer la fonction d'aide avec le reste du code non référencé.

Tests