Wie erhalte ich einen Stack-Trace in OCaml?
-
02-07-2019 - |
Frage
Das Ziel Caml Sprache wird nur Stack-Traces erzeugen, wenn Sie fragen, für sie genau richtig - was sind die Voraussetzungen für beide Bytecode und nativen Code
Lösung
Übersetzen mit -g und Umgebungsvariable OCAMLRUNPARAM = b
Andere Tipps
Einige Printexc Funktionen können Sie tun dies programmatisch .
Weil es sieht aus wie Sie nur Spuren für Ausnahmen auf Unix erhalten Sie Gabel und die Ausnahme in dem zweiten Prozess werfen. Auf diese Weise der Hauptprozess fortgesetzt werden kann:
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
Wenn Sie mit Ocamlbuild stattdessen Compiler direkt von Aufrufen können Sie den debug
Tag verwenden. Aus dem Handbuch :
Mit OCamlbuild, können Sie einfach den Debug-Tag Ihres Programms Ziele hinzuzufügen, und es wird in Ordnung bringen, wenn die Option -g oder nicht eingefügt werden soll.
Zum Beispiel, wenn Sie eine Datei foo.ml
mit Paket bar
bauen dann _tags
Datei eine Zeile haben:
<foo.ml>: package(bar), debug
Dadurch werden die entsprechenden -g
Flaggen einsetzen, während Bytecode / native Dateien zu bauen. Allerdings müssen Sie noch die Umgebungsvariable mit export OCAMLRUNPARAM=b
setzen, wie in den anderen Antworten erwähnt.