Question

Le langage Objective Caml ne produira des traces de pile que si vous les demandez exactement - quelles sont les exigences pour les codes à la fois et le code natif?

Était-ce utile?

La solution

Compilez avec -g et définissez la variable d'environnement OCAMLRUNPARAM = b

Autres conseils

Certaines fonctions Printexc vous permettent de le faire par programmation. .

Comme il semblerait que vous ne puissiez obtenir des traces que des exceptions sous unix, vous pouvez créer une exception et la placer 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 . Sur le manuel :

  

Avec OCamlbuild, vous pouvez simplement ajouter la balise de débogage aux cibles de votre programme. Elle déterminera quand insérer ou non le drapeau -g.

Par exemple, si vous créez un fichier foo.ml avec le package bar , votre fichier _tags aura une ligne:

<foo.ml>: package(bar), debug

Ceci insérera les indicateurs -g appropriés lors de la création de fichiers en code-octet / natifs. Cependant, vous devez toujours définir la variable d'environnement à l'aide de export OCAMLRUNPARAM = b comme indiqué dans les autres réponses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top