我已经为一个项目编写了一个自定义的核心转储处理应用程序。我更改了'/proc/sys/kernel/core_pattern‘来调用我的转储处理程序,并成功调用了它。
现在的问题是将核心转储保存到gdb可以识别的文件中。目前,我的转储处理程序从STDIN读取转储并将其保存到文件'core.dump‘中。当我试图将这个核心转储加载到gdb中时,它给出了错误:
(gdb) ... is not a core dump: File format not recognized
当我在标准核心转储上运行'file‘命令时,它给出了以下结果:
core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'
对于自定义生成的转储,'file‘提供以下内容:
core.dump: data
请任何人可以帮助我如何写核心转储正确,以便它可以在gdb中使用。
附言:我不想使用标准的核心转储文件。
发布于 2011-07-07 04:13:25
我认为您不知何故没有将所有数据写入到核心文件中。
创建一个简单的脚本,使其可执行,并将核心模式设置为脚本。
#!/bin/sh
cat > /tmp/core.$$
现在生成一个核心文件(例如,运行sleep 1243
并按ctrl+\
),它应该可以工作。
我刚刚在我的系统上测试了它,它工作起来没有任何问题。
发布于 2011-07-07 04:04:03
首先要检查的是Elf头标志,它指明了它是什么类型的文件。它有四个值-共享对象、未链接对象、可执行文件和核心转储。这很可能是导致gdb错误的原因。
此外,尝试使用objdump检查它-它可以拆分整个ELF文件,以分析其明显不好的部分。
你可以在https://refspecs.linuxbase.org/elf/elf.pdf上找到ELF规范
https://stackoverflow.com/questions/6602176
复制相似问题