我的应用程序由于未捕获的异常而崩溃(我的 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/