Вопрос

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

Это было полезно?

Решение

Скомпилируйте с ключом -g и установите переменную среды OCAMLRUNPARAM=b.

Другие советы

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

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

export OCAMLRUNPARAM=b
# compile with -g

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top