Подтвердить что ты не робот

Как получить трассировку стека в OCaml?

Язык Objective Caml будет создавать только трассировки стека, если вы попросите их правильно: каковы требования как для байт-кода, так и для собственного кода?

4b9b3361

Ответ 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, как указано в других ответах.