2008-09-28 5 views

ответ

34

Compile с -g и установить переменную окружения OCAMLRUNPARAM = б

+1

Для родного кода я считаю, что это работает только для OCaml v3.10 или новее. – 2008-09-28 17:17:01

9

Некоторые Printexc функции позволяют сделать это программно.

+2

В частности, `Printexc.record_backtrace true`. – 2012-08-03 21:41:23

2

Потому что похоже, что вы можете получать трассировки только для исключений в unix, которые вы можете развить и выбросить исключение во второй процесс. Таким образом, основной процесс может продолжаться:

export OCAMLRUNPARAM=b 
# compile with -g 

flush_all(); let r = Unix.fork() in if r == 0 then raise Exit 
0

Если вы используете Ocamlbuild вместо того, чтобы вызывать компилятор напрямую, вы можете использовать debug тег. Из manual:

С OCamlbuild, вы можете просто добавить отладки тег цели вашей программы, и он разберется, когда вставить флаг -g или нет.

Например, если вы создаете файл foo.ml с пакетом bar, то ваш файл _tags будет иметь строку:

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

Это будет вставить соответствующие -g флагов при строительстве байткод/​​родные файлов. Однако вам все равно нужно установить переменную окружения, используя export OCAMLRUNPARAM=b, как указано в других ответах.