从没有GDB的核心文件获取回溯

从没有GDB的核心文件获取回溯,gdb,coredump,Gdb,Coredump,有没有一种方法可以不使用GDB从核心文件中获取回溯跟踪 程序崩溃,生成核心文件,但目标计算机上未安装GDB。有没有办法在没有GDB的情况下从核心文件了解回溯 有没有一种方法可以不使用GDB从核心文件中获取回溯跟踪 当然有。还有其他调试器,应用程序可能会自己生成堆栈跟踪,而根本不生成core文件。包括在Linux上执行此操作的代码 然而,在您的情况下,使用GDB简单地分析核心可能更容易 目标计算机上未安装GDB 您可以在任何其他机器(通常称为主机——编译二进制文件的机器)上分析核心 为此,您需要:

有没有一种方法可以不使用GDB从核心文件中获取回溯跟踪

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

有没有一种方法可以不使用GDB从核心文件中获取回溯跟踪

当然有。还有其他调试器,应用程序可能会自己生成堆栈跟踪,而根本不生成
core
文件。包括在Linux上执行此操作的代码

然而,在您的情况下,使用GDB简单地分析
核心可能更容易

目标计算机上未安装GDB

您可以在任何其他机器(通常称为主机——编译二进制文件的机器)上分析
核心

为此,您需要:

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

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

在这一点之后,我的答案是针对linux-x86_64体系结构的

如果忽略帧指针或对其进行程序优化,则在可靠地提取回溯时,使用帧指针(即rbp)不起作用。在x86_64体系结构上,编译器,例如gcc emit.eh_frame节,gdb使用它来执行虚拟展开(请记住,我不是在谈论gdb的源代码级调试)。但gdb需要二进制文件来进行虚拟展开,因为gdb假设内核没有可执行内容,因为默认情况下,linux box内核上没有可执行内容 只转储数据段

如果您在linux-x86_64上有完整的coredump并且没有二进制文件,那么下面的项目可能会对您有所帮助。