GDB 和 corefiles 导致“无法从内存读取有效的对象文件图像。”

问题描述 投票:0回答:1

在相当旧的 Linux 系统上,我无法获取 gdb 之后可以读取的核心转储。内核版本是3.8.13,libc版本是2.3.4。

ulimit -c
设置为无限制,并且
/proc/sys/kernel/core_pattern
指向有效的可写文件位置。当我中止任何进程(
kill -6 PID
)时,它会在指定的位置生成一个核心文件。然而,当稍后尝试使用
gdb -core filename
读取核心文件时,我总是收到错误消息“无法从内存中读取有效的对象文件图像。”此消息的确切含义是什么以及导致它的原因是什么?我还将
/proc/<pid>/coredump_filter
中的所有位设置为 1,但没有帮助。

此外,我发现当我将 gdb 附加到进程,然后使用命令

generate-core-file
从 gdb 创建核心文件时,它会生成一个核心文件,我可以将其读入 gdb 而不会收到此警告。我尝试将核心文件加载到gdb版本6.3.50和版本7.10-1ubuntu中。

linux gdb coredump
1个回答
4
投票

但是,当稍后尝试使用

gdb -core filename
读取核心文件时,我总是收到错误消息“无法从内存中读取有效的对象文件图像。”

您很可能会忽略该警告。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.