Объективный язык Caml будет создавать только трассировки стека, если вы попросите их правильно: каковы требования как для байт-кода, так и для собственного кода?Как получить трассировку стека в OCaml?
ответ
Compile с -g и установить переменную окружения OCAMLRUNPARAM = б
Некоторые Printexc функции позволяют сделать это программно.
В частности, `Printexc.record_backtrace true`. – 2012-08-03 21:41:23
Потому что похоже, что вы можете получать трассировки только для исключений в unix, которые вы можете развить и выбросить исключение во второй процесс. Таким образом, основной процесс может продолжаться:
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
Если вы используете Ocamlbuild вместо того, чтобы вызывать компилятор напрямую, вы можете использовать debug
тег. Из manual:
С OCamlbuild, вы можете просто добавить отладки тег цели вашей программы, и он разберется, когда вставить флаг -g или нет.
Например, если вы создаете файл foo.ml
с пакетом bar
, то ваш файл _tags
будет иметь строку:
<foo.ml>: package(bar), debug
Это будет вставить соответствующие -g
флагов при строительстве байткод/родные файлов. Однако вам все равно нужно установить переменную окружения, используя export OCAMLRUNPARAM=b
, как указано в других ответах.
Для родного кода я считаю, что это работает только для OCaml v3.10 или новее. – 2008-09-28 17:17:01