2017-09-11 100 views
0

我的应用程序因未捕获的异常而崩溃(我的C++代码在某些情况下抛出未捕获的异常)。我正在尝试gdb核心文件。二进制库是“不带条纹”的。堆栈跟踪显示从中捕获未捕获的异常的函数(我的代码),但是当我尝试打印函数参数时,我总是得到“在当前上下文中没有符号xxx”。信息参数也返回“没有符号表信息可用”。gdb corefile看不到函数参数

任何人都可以解释为什么?这是由于解开/破坏堆栈的未捕获异常?

感谢, 弗兰克

+0

coredump不一定会包含所有的符号。这可能是因为缺少库或非调试构建的库,甚至是编译器优化。 – Griffin

+0

另外,您应该在询问新问题之前尝试冷藏[搜索堆栈溢出](https://stackoverflow.com/search?q=gdb+No+symbol+table+info+available)。 – Griffin

回答

1

您的二进制文件没有调试信息。

如果用gcc建立了它,并希望调试core你已经有了(如果如很难重现崩溃),您可能能够通过与正好的重建二进制从此恢复相同的源代码和命令行,添加-g来编译和链接命令。 (注:你必须使用相同的编译线;更换-O2-g不会做。)

如果崩溃并不难复制,简单地-g -O0重建二进制文件,运行它GDB下,并享受“简单”的调试。

二进制库是“不带条纹”。

这并不意味着你的想法。不剥离意味着符号表仍然存在于二进制文件中。

GDB将读取此符号表,并使用它来将地址范围映射到函数名称。

但复苏的名称和局部变量和参数的值,你必须编译与调试信息(这是什么-g标志确实为大多数编译器)。

+0

优化标志是否应该降低? – dlmeetei

+0

@dlmeetei如果你想分析已经存在的'core'文件,则不行。 –

+0

但是我们要求重新编译 – dlmeetei