Como faço para obter um rastreamento de pilha em OCaml?
-
02-07-2019 - |
Pergunta
A linguagem Caml Objetivo só irá produzir rastreamentos de pilha, se você pedir para eles apenas para a direita - o que são os requisitos para tanto bytecode e código nativo
Solução
compilação com -g e conjunto ambiente variável OCAMLRUNPARAM = b
Outras dicas
Alguns Printexc funções deixá-lo fazer isso programaticamente .
Porque parece que você só pode obter traços para exceções no UNIX você pode garfo e lançam a exceção no segundo processo. Desta forma, o processo principal pode continuar:
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
Se você estiver usando Ocamlbuild em vez de chamar o compilador diretamente, você pode usar a tag debug
. Do Manual :
Com OCamlbuild, você pode simplesmente adicionar a tag de depuração para as metas do seu programa, e ele vai resolver quando inserir o flag -g ou não.
Por exemplo, se você está construindo um foo.ml
arquivo com bar
pacote, então seu arquivo _tags
terá uma linha:
<foo.ml>: package(bar), debug
Isto irá inserir as bandeiras -g
apropriadas enquanto a construção de arquivos bytecode / nativos. No entanto, você ainda precisa definir a variável de ambiente usando export OCAMLRUNPARAM=b
como mencionado em outras respostas.