c++ - gdb corefile 看不到函数参数

标签 c++ exception gdb coredump stack-frame

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

任何人都可以阐明原因吗?是由于未捕获的异常展开/破坏了堆栈吗?

谢谢, 弗兰克

最佳答案

您的二进制文件缺少调试信息。

如果您使用 gcc 构建它,并且想要调试您已有的 core(例如,如果很难重现崩溃),您可以 能够通过使用完全相同的源代码和命令行重建二进制文件,添加 -g 来编译和链接命令,从而从中恢复。 (注意:您必须使用相同的编译行;将-O2 替换为-g 是不行的。)

如果崩溃不难重现,只需使用 -g -O0 重建二进制文件,在 GDB 下运行,享受“轻松”调试。

The binary library is "not striped".

这并不代表您认为的意思。未剥离意味着符号表仍然存在于二进制文件中。

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

但要恢复局部变量和参数的名称和值,您必须使用调试信息进行编译(这是 -g 标志对大多数编译器所做的)。

关于c++ - gdb corefile 看不到函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46165116/

相关文章:

c++ - 使用 cin.get();两次

java - 你能弄清楚为什么这个程序会触发 IllegalStateException 吗?

java - 如何使用反射指定异常类型?

c - 如何跟踪特定值的 "fate"?

c - 数组值不更新

c++ - 在 Windows 上调试 linux 故障转储

C++ 和谷歌测试

c++ - 命名 RVO 的可能性?

c++ - 如何工作 - 没有 new 的指针/Unique_ptr

Java 日期时间格式化程序 : DateTimeParseException with GMT-date