2008-09-28 5 views

Antwort

34

Compile mit -g und Umgebungsvariable OCAMLRUNPARAM = b

+1

Für nativen Code, glaube ich, dass dies nur für OCaml v3.10 oder später funktioniert. –

9

Einige Printexc Funktionen können Sie dies programmatisch tun.

+2

Speziell 'Printex.record_backtrace wahr '. –

2

Da es so aussieht, als könnten Sie nur Traces für Exceptions unter Unix erhalten, können Sie forcieren und die Exception im zweiten Prozess auslösen. 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 
0

Wenn Sie mit Ocamlbuild anstatt direkt aufrufen Compiler, können Sie die debug Tag verwenden. Vom manual:

Mit OCamlbuild, können Sie einfach die Ziele des Debug-Tag zu Ihrem Programm hinzufügen, und es wird in Ordnung bringen, wenn die Option -g oder nicht einfügen.

Zum Beispiel, wenn Sie eine Datei foo.ml mit Paket Aufbau bar 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. Sie müssen die Umgebungsvariable jedoch weiterhin mithilfe von export OCAMLRUNPARAM=b festlegen, wie in den anderen Antworten erwähnt.

Verwandte Themen