如何解释 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 ()
...
如何解释这种输出?
编辑:
- 我已经使用
./configure --enable-debug
启用了调试信息(我正在使用 oasis)。
- 我在 OS X 10.10
上使用 GDB 7.9.1
- 我正在使用 OCaml 4.02.2
编辑 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.
可能会提供更多信息
我正在尝试在 GDB 中读取我的 OCaml 程序的回溯。输出如下所示:
(gdb) bt
#0 0x0000000100535ac6 in .L207 ()
#1 0x0000000100535acb in .L207 ()
#2 0x0000000100535acb in .L207 ()
...
如何解释这种输出?
编辑:
- 我已经使用
./configure --enable-debug
启用了调试信息(我正在使用 oasis)。 - 我在 OS X 10.10 上使用 GDB 7.9.1
- 我正在使用 OCaml 4.02.2
编辑 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.
可能会提供更多信息