Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用寄存器和原始堆栈在没有符号的情况下分析和调试gdb核心_Gdb_Stack_Symbols_Core - Fatal编程技术网

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

如何使用寄存器和原始堆栈在没有符号的情况下分析和调试gdb核心,gdb,stack,symbols,core,Gdb,Stack,Symbols,Core,在客户处,第三方软件崩溃。进程和库被剥离(没有符号),调用堆栈不提供任何有用的信息。我所拥有的只是可能没有损坏的寄存器。这个第三方代码是用C编写的 现在,我已经使用gdb来调试更简单的问题。但是这个有点复杂。我认为寄存器和原始堆栈信息可以用来记录崩溃发生的位置,我需要这方面的帮助 不可能在客户站点部署非剥离二进制文件,也不可能进行内部崩溃复制。另外,我不熟悉这个第三方代码 我还需要以下方面的指针/站点/文档: 1) ELF和各种节标题。 2) 如何为库和进程创建符号文件(编译期间)。 3) 如何

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

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

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

我还需要以下方面的指针/站点/文档:
1) ELF和各种节标题。
2) 如何为库和进程创建符号文件(编译期间)。

3) 如何告诉gdb从符号文件中读取符号。

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

gdb [options] executable-file core-file
要使用调试信息(行、类型等的符号和侏儒)编译进程,需要在编译器标志中添加
-g
。这同样适用于自定义库

对于系统库,有时可能是conviant(不总是),现代Linux发行版(至少Fedora)直接将它们提供给gdb