Wenn -g zum Drucken von Stack-Traces in OCaml verwendet werden soll?

8

Ich versuche, einen StackTrace mit Printexc.get_backtrace zu bekommen, aber ich bekomme einen Fehler:

(Program not linked with -g, cannot print stack backtrace)

Ich kompiliere so:

ocamlfind ocamlc -g -o foo ... $(FOO_OBJS)

FOO_OBJS werden mit nur zusammengestellt: ocamlc -c $OBJ

Was ist los? Sollte jedes .cmo mit -g kompiliert werden?

Wenn in einem Objekt, das ohne -g kompiliert wurde, eine Exception auftritt, bekomme ich einen Teil-Stacktrace oder gar keinen Stacktrace?

    
pbp 23.02.2012, 17:42
quelle

1 Antwort

9
  

Was ist los? Soll jedes .cmo mit -g?

kompiliert werden

Ja, Sie müssen die Option -g zur Kompilierung und Verknüpfung hinzufügen. Sie können auch ocamldebug verwenden, um das Programm mit dieser Option zu durchlaufen. Auch die Umgebungsvariable OCAMLRUNPARAM muss auf b gesetzt werden.

  

Wenn in einem Objekt, das ohne -g kompiliert wurde, eine Ausnahme auftritt, bekomme ich eine   Partial Stacktrace oder gar kein Stacktrace?

Sie wetten! Ich erinnere mich ein paar Mal, dass ich die Option -g vergessen hatte und die Rückverfolgung nur der Standardbibliothek entsprach.

    
nlucaroni 23.02.2012, 18:09
quelle