进程的 GDB 全内存转储

Posted

技术标签:

【中文标题】进程的 GDB 全内存转储【英文标题】:GDB full memory dump of process 【发布时间】:2020-05-03 11:40:01 【问题描述】:

我正在尝试转储远程计算机上的进程内存。目标机器是某种旧的 Linux,我在上面运行 gdbserver 8.3 我已经编译。 我可以使用gcore 命令创建一些方便的转储,但是,这些转储缺少所有r-xr-- 部分,它只包含可写部分。谁能指导我如何生成完整的内存转储,包括所有内容,最好采用相同的核心转储格式? 我都试过了

set use-coredump-filter on
set use-coredump-filter off

set dump-excluded-mappings on
set dump-excluded-mappings off

【问题讨论】:

【参考方案1】:

您应该根据http://man7.org/linux/man-pages/man5/core.5.html/proc/PID/coredump_filter 中设置核心文件过滤器。

例如

echo 0xff > /proc/$(pidof foo)/coredump_filter
gcore $(pidof foo)

【讨论】:

太棒了,谢谢。我还是不明白为什么set use-coredump-filter off没有解决。

以上是关于进程的 GDB 全内存转储的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上使用核心转储和 gdb 如何使用近似虚拟内存 (VSZ)?

gdb 搜索核心转储内存

如何获取详细的 valgrind 核心或使用 gdb 将调试附加到核心在启动时转储的进程?

GDB核心转储具有损坏的堆栈,显示“堆栈帧无法访问地址0x12处的内存”

核心转储注释部分

使用正在运行的进程的共享内存收集核心转储