Язык Objective Caml будет создавать только трассировки стека, если вы попросите их правильно: каковы требования как для байт-кода, так и для собственного кода?
Как получить трассировку стека в OCaml?
Ответ 1
Скомпилируйте с -g и установите переменную окружения OCAMLRUNPARAM = b
Ответ 2
Некоторые функции Printexc позволяют делать это программно.
Ответ 3
Потому что похоже, что вы можете получить только трассировки для исключений в unix, которые вы можете развить и выбросить исключение во второй процесс. Таким образом, основной процесс может продолжаться:
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
Ответ 4
Если вы используете Ocamlbuild вместо прямого вызова компилятора, вы можете использовать тег debug
. Из manual:
С OCamlbuild вы можете просто добавить тег отладки в целевые объекты программ, и он будет сортировать, когда нужно вставить флаг -g или нет.
Например, если вы создаете файл foo.ml
с пакетом bar
, то ваш файл _tags
будет иметь строку:
<foo.ml>: package(bar), debug
Это приведет к вставке соответствующих флагов -g
при создании байт-кода/собственных файлов. Однако вам все равно нужно установить переменную среды с помощью export OCAMLRUNPARAM=b
, как указано в других ответах.