LINUX.ORG.RU

отладка caml


0

0

подскажите, как можно определить, если программа вываливается с переполнением стека (подозрение на нехвостовую рекурсию), в каком именно месте это произошло. какие есть способы отладки (кроме как вставлять контрольные printf)

раньше приходилось иметь дело в основном с питоном, там в таких случаях всё ясно из tranceback; но в caml ведь как я понимаю стек нигде не хранится, и так просто это не разберёшь.

или есть какой-то надёжный способ как не делать ошибок с рекурсией никогда?

Так там же есть дебаггер, с возможностью отката (!!!).

One-Eye
()
Ответ на: комментарий от ugoday

переполнение стека это разве исключение?

я ничего особенно сложного не делаю; всё что требуется -- если в каком-то месте ляпнул нехвостовую рекурсию так что при выполнении всё грохнулось, определить где.

ID19999
() автор топика
Ответ на: комментарий от ID19999

let rec some_fun = fun .... (*Здесь ты подозреваешь ошибку*)

try (some_fun ...) with _ -> failwith "error in some_fun";;

Вот так оно и отлавливается. Хотя дебаггер в данном случае будет правильнее.

Ещё можешь использовать трассировку.

ugoday ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.