Comment puis-je obtenir une trace de pile dans OCaml?
Le langage Caml Objective ne produira des traces de pile que si vous les demandez correctement - quelles sont les exigences pour le bytecode et le code natif?
4 réponses
Compiler avec -g et définir la variable D'environnement OCAMLRUNPARAM = b
Comme il semble que vous ne puissiez obtenir que des traces pour les exceptions sous unix, vous pouvez bifurquer et lancer l'exception dans le second processus. De cette façon, le processus principal peut continuer:
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
Si vous utilisez Ocamlbuild au lieu d'appeler directement le compilateur, vous pouvez utiliser la balise debug
. Du manuel :
Avec OCamlbuild, vous pouvez simplement ajouter la balise de débogage aux cibles de votre programme, et il va trier quand insérer l'indicateur-g ou non.
Par exemple, si vous construisez un fichier foo.ml
avec le paquet bar
alors votre fichier _tags
aura une ligne:
<foo.ml>: package(bar), debug
Cela insérera les drapeaux -g
appropriés lors de la construction bytecode/fichiers natifs. Cependant, vous devez toujours définir la variable d'environnement en utilisant export OCAMLRUNPARAM=b
comme mentionné dans les autres réponses.