GDB和corefiles导致"无法从内存中读取有效的目标文件图像。"

时间:2016-12-21 16:10:12

标签: linux gdb core

在一个相当古老的Linux系统上,我无法获得gdb之后可以读取的coredump。内核版本为3.8.13,libc版本为2.3.4。 ulimit -c设置为无限制,/proc/sys/kernel/core_pattern指向有效的可写文件位置。当我中止任何进程(kill -6 PID)时,它会在指定的位置生成一个核心文件。但是,当稍后尝试使用gdb -core filename读取核心文件时,我总是收到错误消息&#34;无法从内存中读取有效的目标文件图像。&#34;这条消息的确切含义是什么?是什么原因造成的?我还在/proc/<pid>/coredump_filter中将所有位设置为1,但它没有帮助。

此外,我发现当我将gdb附加到进程然后使用命令generate-core-file从gdb创建核心文件时,它会生成一个核心文件,我可以将其读入gdb而不会收到此警告。我试图将核心文件加载到gdb版本6.3.50和版本7.10-1ubuntu。

1 个答案:

答案 0 :(得分:3)

  

然而,当稍后尝试使用while mapfile -t -n 10 ary && ((${#ary[@]})); do printf '%s\n' "${ary[@]}" printf -- '--- SNIP ---\n' done < file 读取核心文件时,我总是收到错误消息&#34;无法从内存中读取有效的目标文件图像。&#34;

您很可能会忽略该警告。

gdb -core filename之后你想做什么?您可能想要gdb -core filename(这会产生相同的警告,但应该为您提供可用的GDB会话)。

  

是什么原因导致“无法从内存中读取有效的目标文件图像。”

某些版本的GDB不理解VDSO,它出现在共享对象的加载器列表中,但不是一个,并发出上面的警告。这个警告可以安全忽略。