在OCaml中打印当前调用堆栈

时间:2012-08-12 11:22:32

标签: ocaml

在OCaml中是否有办法以编程方式获取当前调用堆栈?通过这个,我不是指调试器内部,而是作为函数调用程序内部将打印当前调用堆栈。我想这不应该超出字节码解释器的能力,特别是如果调试符号可用的话。

4 个答案:

答案 0 :(得分:5)

我来这个问题寻找同样的事情,这是我的解决方案

Printexc.get_callstack 5 |> Printexc.raw_backtrace_to_string

(它实际上是一种熟悉新代码库的好方法)

答案 1 :(得分:1)

你也可以使用ocamldebug,用它来编译,用字节码编译。在这种环境中,Printexc.get_backtrace()更加完善。

答案 2 :(得分:0)

对于本机代码,可以使用glibc的backtrace,但它可能无法正确打印所有堆栈帧。

答案 3 :(得分:0)

不幸的是,从代码中获取回溯的唯一方法是在引发异常时,可以使用Printexc.get_backtrace()。它不会给你通过函数的名称,只是代码中的位置,只有当OCaml能够恢复它们时......