如何在顶层打印函数调用和回溯?

时间:2015-04-15 08:36:02

标签: function debugging ocaml ocaml-toplevel

我试图获得函数调用的回溯。我想知道是否有人知道如何在顶层做到这一点。

1 个答案:

答案 0 :(得分:4)

#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启用跟踪录制,则会显示当前的调用堆栈。