10

OCaml 中有没有办法以编程方式获取当前调用堆栈?我的意思不是在调试器内部,而是作为程序内部的函数调用,它将打印当前调用堆栈。我想这不应该超出字节码解释器的能力,尤其是在调试符号可用的情况下。

4

4 回答 4

9

我来到这个问题寻找同样的东西,这是我的解决方案

Printexc.get_callstack 5 |> Printexc.raw_backtrace_to_string

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

于 2015-06-29T18:57:00.563 回答
1

你也可以使用 ocamldebug,你可以用它来启动你的代码,编译成字节码。在这种环境下,Printexc.get_backtrace() 就更完善了。

于 2012-09-03T10:12:19.943 回答
0

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

于 2012-08-13T07:42:48.073 回答
0

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

于 2012-08-13T07:17:22.760 回答