进程的核心转储究竟是什么以及包含什么?

Lis*_*tek 6 process debugging memory core-dump gdb

很明显,GDB 可以生成进程的核心转储,例如通过它的包装器 - gcore,但是不清楚它究竟包含什么,而且很难找到答案,因为不同的来源说完全不同的东西。

因此,我有以下问题:

  1. 它是否包含进程的整个虚拟内存?如果不是,那是哪一部分?所有可写区域或仅堆栈或仅(顾名思义)某些重要部分或什么?

  2. 是否可以通过 GDB 生成具有完整进程内存的核心文件?如果是这样,如何?

  3. 通过根据进程的内存映射保存和连接所有区域的内存生成的“转储”与使用gcore命令自动生成的文件有什么区别?

  4. 一个进程将一些数据写入 RAM 的某处。我可以确定数据将(始终)访问并保存在使用gcore命令生成的核心文件中吗?如果不是,为什么?它取决于什么?

Bar*_*mar 6

核心文件包含进程虚拟内存中特定于该进程的所有部分,通常是数据和堆栈段。它不包括包含可执行代码的文本段——当你想调试一个核心文件时,你必须告诉调试器正在运行什么程序。

您可以在Anatomy of an ELF core file 中找到对内容的详细说明