Clause
← Gesamte Dokumentation

Das englische Original wurde seit dieser Übersetzung geändert, daher können Teile davon veraltet sein. Auf Englisch lesen

Übersetzt aus dem englischen Original · 1e3a39c8-dirty · 2026-10-26

Debugging ausführbarer Dateien

-g erzeugt Zeilentabellen für den Erlang-Quelltext. Sie funktionieren auf jeder Optimierungsstufe sowie mit --emit, positionalem Linken mit -o und Projektzielen.

Zeilentabellen

Linken

-g reicht -g an den Clang-Treiber weiter. MSVC-Ziele schreiben außerdem eine PDB, die die ausführbare Datei nur über den Dateinamen nennt (/PDBALTPATH:%_PDB%); sie wird als <name>.pdb neben der ausführbaren Datei veröffentlicht, nach ihr, in derselben verzögerten Veröffentlichung. ELF-Dateien behalten DWARF in sich. Mach-O-Dateien bräuchten dsymutil über die bereitgestellten Objekte, bevor die Bereitstellung entfernt wird; das wird nicht ausgeführt, daher verlieren ausführbare Dateien unter macOS beim Linken ihre Zeilentabellen.

Erlang-Aufrufstapel

Erzeugter Code wechselt zwischen Funktionen durch Endübergaben über den Prozess-Stack (Ausführungsmodell), daher zeigt ein nativer Backtrace die aktuelle Erlang-Funktion und dann den Scheduler (ProcessStack::run, Executor::work). Die Erlang-Frames des angehaltenen Prozesses gibt die Runtime-Hilfsfunktion clause::runtime::debug_erlang_stack() aus, den innersten zuerst, als module:function/arity; sie liest den laufenden Prozess des Threads und die kompilierten Namen der Frames, nie die Atomtabellen der 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 schreibt den Aufruf call clause::runtime::debug_erlang_stack() nach set language c++ (Frames von Erlang-Code haben keine Sprache, in der GDB C++-Namen parst). Es benennt die Frames twice () at /path/debug.hrl:5. Ausführbare Dateien mit -Os können die Hilfsfunktion zusammen mit anderem nicht referenziertem Code verlieren.

Tests