我为项目编写了一个自定义核心转储处理应用程序。我已经更改了'/ proc / sys / kernel / core_pattern'来调用我的dump-handler并成功调用它。
现在问题是将核心转储保存到gdb可以识别的文件中。目前我的dump-handler从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
请任何人都可以帮我正确编写core-dump,以便在gdb中使用。
PS:我不想使用标准核心转储文件。
答案 0 :(得分:4)
首先要考虑的是Elf标头标志,它指示它是什么类型的文件。它有四个值 - 共享对象,未链接对象,可执行文件和核心转储。这很可能是导致gdb错误的原因。
另外,尝试用objdump检查它 - 它可以分开整个ELF文件以分析它的哪一部分显然不好。
找到ELF规范答案 1 :(得分:4)
我认为你不知何故不把所有数据写入核心文件。
创建一个简单的脚本,使其可执行并将核心模式设置为脚本。
#!/bin/sh
cat > /tmp/core.$$
现在生成核心文件(例如运行sleep 1243
并按ctrl+\
),它应该可以正常工作。
我刚刚在我的系统上测试了它,它没有问题。