3

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

4

1 回答 1

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,将显示当前调用堆栈。

于 2015-04-15T12:14:27.807 回答