在OCaml中是否有办法以编程方式获取当前调用堆栈?通过这个,我不是指调试器内部,而是作为函数调用程序内部将打印当前调用堆栈。我想这不应该超出字节码解释器的能力,特别是如果调试符号可用的话。
答案 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能够恢复它们时......