Когда следует использовать -g для печати трассировки стека в OCaml? - PullRequest
8 голосов
/ 23 февраля 2012

Я пытаюсь получить трассировку стека с помощью Printexc.get_backtrace, но получаю ошибку:

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

Я собираю так:

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

FOO_OBJS компилируется только с: ocamlc -c $OBJ

Что не так? Каждый .cmo должен быть скомпилирован с -g?

Если произойдет исключение в объекте, скомпилированном без -g, получу ли я частичную трассировку стека или вообще не будет трассировки стека?

1 Ответ

9 голосов
/ 23 февраля 2012

Что не так?Если каждый .cmo должен быть скомпилирован с -g?

Да, вы должны добавить опцию -g для компиляции и компоновки.Вы также можете использовать ocamldebug для пошагового выполнения программы с этой опцией.Также переменная окружения, OCAMLRUNPARAM должна быть установлена ​​в b.

Если в объекте, скомпилированном без -g, возникнет исключение, получу ли я частичную трассировку стека, или вообще не будет трассировку стека?*

Вы держите пари!Несколько раз я вспоминал, что забыл опцию -g, а обратная трассировка была только из стандартной библиотеки.

...