Как отследить ошибку программ OCaml? - PullRequest
3 голосов
/ 18 июня 2011

Я пишу компилятор, написанный на OCaml.Иногда, когда возникает ошибка выполнения, он показывает строку ошибки, но не показывает контекст, например, как вызывается функция, с какими значениями ...

Для того, чтобы помочь отладкеКто-нибудь знает способ показать шаги выполнения до ошибки с реальным значением соответствующих переменных?

Кстати, я использую Emacs в качестве редактора.

Ответы [ 2 ]

7 голосов
/ 18 июня 2011

Ocaml компилируется.Вы, кажется, привыкли к интерпретируемым языкам, где система времени выполнения имеет доступ к полному исходному коду программы.В случае скомпилированной программы система времени выполнения не имеет большого доступа к информации.Например, имена переменных исчезают во время компиляции, и ничто не будет отслеживать аргументы, передаваемые каждой функции, за исключением случаев, когда это необходимо для нормального выполнения программы (выполнение этого потребовало бы больших накладных расходов).

Если вы компилируетеваша программа с символами отладки (передайте компилятору опцию -g), вы можете получить трассировку стека, если ваша программа умирает от необработанного исключения.Вы получите имена функций и некоторые местоположения программ, но не детальное содержимое памяти.Компиляция с отладочной информацией приводит к увеличению размера исполняемого файла, но не меняет производительность во время выполнения.Вам нужно установить переменную окружения OCAMLRUNPARAM , чтобы при запуске программы она содержала b.

ocamlc -g -o foo foo.ml
export OCAMLRUNPARAM=b
./foo

Если вам нужна дополнительная информация, вам нужно запустить вашу программу в отладчике.

0 голосов
/ 15 июля 2011

Эта ссылка Отладка в Ocaml должен ответить на ваш вопрос.

...