是否可以从ELF Core文件中删除堆?

时间:2014-11-21 18:37:59

标签: c++ linux-kernel operating-system stack-trace elf

我通过/proc/sys/kernel/core_pattern从非常大的coredump收集堆栈跟踪。以下问题建议使用/proc/pid/core_filter来减小大型coredump的大小:

Minimal core dump (stack trace + current frame only)

Selective core dump in Linux - How can I select the dumped sections?

Is it possible to get a Linux coredump that only contains callstack, threads, and local variables?

但是,当将core_filter设置为' 0'时,生成的coredump对gdb< bt命令不再有意义。

所以,我有以下两部分问题:

1)除了gdb之外还有一个工具可以从这些最小的coredump中提取堆栈跟踪吗?

2)是否可以解析ELF Core文件以删除堆段?这个问题:What and where are the stack and heap?似乎表明这可能是可能的。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

但是,当将core_filter设置为' 0'时,生成的coredump对gdb< bt命令不再有意义。

请注意,对于动态链接的二进制文件,GDB backtrace需要知道堆栈跟踪中出现的所有共享库(因此它可以找到相应的展开描述符)。

对于"正常"核心文件,此信息位于中。从core删除堆然后会损坏info shared,这会导致任何共享库无效的backtrace

您可以关闭第0位和第1位(匿名私有和共享映射,这将覆盖堆)并且仍然可以获得可用的核心如果您打开第3位(这将涵盖文本)共享库,通常不是必需的,但通过删除堆来实现。)