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

时间:2015-07-09 13:27:22

标签: gdb ocaml

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

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

我如何解释这种输出?

编辑:

  • 我使用./configure --enable-debug启用了调试信息(我正在使用绿洲)。
  • 我在OS X 10.10上使用GDB 7.9.1
  • 我正在使用OCaml 4.02.2

编辑2:Linux版本的GDB输出似乎是正确的。有谁知道为什么OS X和Linux版本之间存在这样的差异?

3 个答案:

答案 0 :(得分:2)

你用-g编译了吗?我通常会收到像#3 0x0000000000401f49 in caml_program ()这样的内容。还有export OCAMLRUNPARAM=b,当程序崩溃时会给出堆栈跟踪。

(您可能希望发布代码段和编译命令。)

您还可以找到http://www.ocamlpro.com/blog/2012/08/20/ocamlpro-and-4.00.0.htmlhttp://oud.ocaml.org/2012/slides/oud2012-paper5-slides.pdf

答案 1 :(得分:2)

检查使用的C编译器和汇编器。 Mac OS可能使用clang,但可能无法为gdb生成完整的调试信息。在这种情况下,使用lldb可能会更有成效。

答案 2 :(得分:0)

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

如果你想了解你的代码在CPU / Register / Assembly / Bitfiddling-witchcraft上做了什么,那么阅读Jane Street的博客文章writing performance sensitive ocaml code可能会提供更多信息。