在没有GDB的情况下从Core文件中获取BackTrace

时间:2014-03-17 17:32:04

标签: gdb coredump

有没有办法在不使用GDB的情况下从核心文件中获取后向跟踪?

程序崩溃并生成核心文件,但目标计算机上没有安装GDB。有没有办法在没有GDB的情况下从核心文件中了解回溯?

2 个答案:

答案 0 :(得分:1)

  

有没有办法在不使用GDB的情况下从核心文件中获取后向跟踪?

肯定有。还有其他调试器,应用程序可能首先生成堆栈跟踪,甚至没有生成core文件。 Google logging library包含在Linux上执行此操作的代码。

但是,在您的情况下,使用GDB简单分析core可能更容易。

  

目标计算机上没有安装GDB。

您可以分析任何其他计算机上的core(通常称为主机 - 您正在编译二进制文件的计算机)。

为此你需要:

  • 来自目标计算机的系统库(如果您的二进制文件是动态链接的)和
  • 经过适当配置的cross-GDB(通常包含在嵌入式开发套件中)。

答案 1 :(得分:1)

从核心文件中获取回溯是非常多的体系结构和操作系统特定的,如果您打算自己提取所有内容。
gdb是一个可在多种体系结构上运行的可移植程序。无论如何,gdb使用两种技术从coredump中提取回溯:
1.遵循帧指针的链接列表(在x86架构的情况下为ebp) 2.使用异常处理框架进行虚拟展开 gdb需要二进制文件从coredump中提取回溯,因为二进制文件包含信息,如何启动虚拟展开。

在此之后我的答案特定于linux-x86_64架构。

使用帧指针即rbp在省略帧指针或优化程序时可靠地提取回溯时不起作用。在x86_64架构上,编译器例如gcc发出.eh_frame部分,gdb使用它来进行虚拟展开(记住我不是在讨论gdb的源代码级调试)。但是gdb需要二进制文件来进行虚拟展开,因为gdb假定核心没有可执行内容,因为默认情况下在linux box内核上 仅转储数据段。

如果您在linux-x86_64上有完整的coredump且没有二进制文件,那么以下项目可能会对您有所帮助。 http://sourceforge.net/projects/core-dump-analyzer/