Clause
← Toda a documentação

O original em inglês mudou desde esta tradução, pelo que partes dela podem estar desatualizadas. Ler em inglês

Traduzido do original em inglês · 1e3a39c8-dirty · 2026-10-26

Depuração de executáveis

-g emite tabelas de linhas do código-fonte Erlang. Funcionam em todos os níveis de otimização e com --emit, com a ligação posicional -o e com alvos de projeto.

Tabelas de linhas

Ligação

-g passa -g ao driver do Clang. Os alvos MSVC também escrevem um PDB que o executável nomeia apenas pelo nome do ficheiro (/PDBALTPATH:%_PDB%); é publicado ao lado do executável como <name>.pdb, depois do executável, na mesma publicação diferida. Os executáveis ELF mantêm o DWARF no seu interior. Os executáveis Mach-O precisariam de dsymutil sobre os objetos preparados antes de a preparação ser removida; isso não é feito, pelo que os executáveis macOS perdem as tabelas de linhas na ligação.

Pilha de chamadas Erlang

O código gerado passa de uma função para outra por transferências de cauda através da pilha do processo (modelo de execução), pelo que um backtrace nativo mostra a função Erlang atual e depois o escalonador (ProcessStack::run, Executor::work). Os frames Erlang do processo parado são impressos pela função auxiliar do runtime clause::runtime::debug_erlang_stack(), do mais interior para o mais exterior, como module:function/arity; lê o processo em execução da thread e os nomes compilados dos frames, nunca as tabelas de átomos do 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

No GDB, a chamada escreve-se call clause::runtime::debug_erlang_stack() depois de set language c++ (os frames de código Erlang não têm uma linguagem na qual o GDB analise nomes C++). Nomeia os frames twice () at /path/debug.hrl:5. Os executáveis -Os podem eliminar a função auxiliar juntamente com outro código não referenciado.

Testes