Как напечатать вызовы функций и возврат на верхний уровень?

Я пытаюсь получить обратный след вызовов функций. Интересно, кто-нибудь знает, как сделать это на высшем уровне.

1 ответ

#trace директива полезна для отслеживания функций, например,

# let rec f x = if x > 0 then f (x - 1) else "done";;
val f : int -> string = <fun>
# #trace f;;
f is now traced.
# f 12;;
f <-- 12
f <-- 11
f <-- 10
...

Чтобы отследить несколько функций, используйте #trace для всех них, например,

#trace f;;
#trace g;;

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

Для отслеживания функции f использование #untrace f, чтобы отследить все функции, которые в данный момент отслеживаются #untrace_all

Также вы можете найти полезное Printexc.get_callstack функция, что, если вы включили запись трассировки с Printexc.record_bactrace true, покажет вам текущий стек вызовов.

Другие вопросы по тегам