如何解释 OCaml 程序的 GDB 回溯?

How to interpret GDB backtrace of an OCaml program?

我正在尝试在 GDB 中读取我的 OCaml 程序的回溯。输出如下所示:

(gdb) bt
#0  0x0000000100535ac6 in .L207 ()
#1  0x0000000100535acb in .L207 ()
#2  0x0000000100535acb in .L207 ()
...

如何解释这种输出?

编辑:

编辑 2:Linux 版本的 GDB 的输出似乎是正确的。有谁知道为什么 OS X 和 Linux 版本之间有这么大的区别?

你是用-g编译的吗?我通常会得到 #3 0x0000000000401f49 in caml_program () 之类的东西。还有 export OCAMLRUNPARAM=b,在程序崩溃时提供堆栈跟踪。

(您可能想要 post 代码片段和编译命令。)

您可能还会发现 http://www.ocamlpro.com/blog/2012/08/20/ocamlpro-and-4.00.0.html and http://oud.ocaml.org/2012/slides/oud2012-paper5-slides.pdf 方便。

检查使用的是什么C编译器和汇编器。 Mac OS 可能使用 clang,它可能不会为 gdb 生成完整的调试信息。在那种情况下,使用 lldb 可能更有成效。

您是否考虑过使用 ocamldebug,或者您是否 在机器端进行调试?

如果您想了解您的代码在 CPU/Register/Assembly/Bitfiddling-witchcraft 端做了什么,那么阅读 Jane Street 的博客 post writing performance sensitive ocaml code.

可能会提供更多信息