有没有办法在不使用GDB的情况下从核心文件中获取后向跟踪?
程序崩溃并生成核心文件,但目标计算机上没有安装GDB。有没有办法在没有GDB的情况下从核心文件中了解回溯?
答案 0 :(得分:1)
肯定有。还有其他调试器,应用程序可能首先生成堆栈跟踪,甚至没有生成有没有办法在不使用GDB的情况下从核心文件中获取后向跟踪?
core
文件。 Google logging library包含在Linux上执行此操作的代码。
但是,在您的情况下,使用GDB简单分析core
可能更容易。
目标计算机上没有安装GDB。
您可以分析任何其他计算机上的core
(通常称为主机 - 您正在编译二进制文件的计算机)。
为此你需要:
答案 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/