如何使用寄存器和原始堆栈分析和调试没有符号的gdb核心

时间:2011-02-11 12:34:58

标签: gdb stack symbols core

在客户所在地,第三方软件崩溃了。删除进程和库(没有符号),调用堆栈不提供任何有用的信息。我所拥有的只是寄存器,可能没有被破坏。这个第三方代码是用C编写的。

现在,我已经使用gdb来调试更简单的问题。但这个有点复杂。我认为注册和原始堆栈信息可用于解决崩溃发生的位置,我需要这方面的帮助。

可能无法在客户站点部署非剥离二进制文件,也不可能进行内部崩溃再现。另外,我不熟悉这个第三方代码。

此外,我还需要以下指针/网站/文件:
1)ELF和各种章节标题 2)如何为库和进程创建符号文件(在编译期间) 3)如何告诉gdb从符号文件中读取符号。

1 个答案:

答案 0 :(得分:0)

我们应该做的一件事就是针对流程的非剥离/带符号版本打开核心文件。只要编译过程(编译器,优化标志等)相同并且您只保留所有这些调试信息,GDB就应该能够为您提供核心所需的所有信息。

gdb [options] executable-file core-file

要使用调试信息(行,类型等符号和矮符)编译流程,需要在编译器标志中添加-g。这同样适用于您的自定义库。

对于系统库,它可能在某个时候(并非总是)有意思,现代Linux发行版(至少Fedora)直接将它们提供给gdb。