Clause
← All dokumentation

Det engelska originalet har ändrats sedan översättningen gjordes, så delar av den kan vara inaktuella. Läs på engelska

Översatt från det engelska originalet · 1e3a39c8-dirty · 2026-10-26

Felsöka körbara filer

-g genererar radtabeller för Erlang-källkoden. De fungerar på varje optimeringsnivå och med --emit, positionell länkning med -o och projektmål.

Radtabeller

Länkning

-g skickar -g till Clang-drivrutinen. MSVC-mål skriver också en PDB som den körbara filen anger endast med filnamn (/PDBALTPATH:%_PDB%); den publiceras bredvid den körbara filen som <name>.pdb, efter den körbara filen, i samma uppskjutna publicering. Körbara ELF-filer behåller DWARF internt. Körbara Mach-O-filer skulle behöva dsymutil över de mellanlagrade objekten innan mellanlagringen tas bort; det körs inte, så körbara filer för macOS förlorar radtabellerna vid länkning.

Erlangs anropsstack

Genererad kod rör sig mellan funktioner genom svansöverföringar via processtacken (exekveringsmodell), så en inbyggd bakåtspårning visar den aktuella Erlang-funktionen och sedan schemaläggaren (ProcessStack::run, Executor::work). Erlang-ramarna för den stoppade processen skrivs ut av runtimens hjälpfunktion clause::runtime::debug_erlang_stack(), innersta först, som module:function/arity; den läser trådens körande process och ramarnas kompilerade namn, aldrig runtimens atomtabeller:

(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 skriver anropet call clause::runtime::debug_erlang_stack() efter set language c++ (ramar i Erlang-kod har inget språk som GDB tolkar C++-namn i). Den namnger ramarna twice () at /path/debug.hrl:5. Körbara filer byggda med -Os kan ta bort hjälpfunktionen tillsammans med annan orefererad kod.

Tester