在一个相当古老的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。
答案 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,它出现在共享对象的加载器列表中,但不是一个,并发出上面的警告。这个警告可以安全忽略。