很明显,GDB 可以生成进程的核心转储,例如通过其包装器 - gcore,但是不清楚它到底包含什么,而且很难找到答案,因为不同的来源说的完全不同。
因此我有以下问题:
它包含进程的整个虚拟内存吗?如果不是,是哪一部分?所有可写区域或仅堆栈或仅(如其名称所示)某些基本部分或什么?
是否可以通过GDB生成具有完整进程内存的核心文件?如果是这样,怎么办?
根据进程的内存映射保存和连接所有区域的内存生成的“转储”与使用命令自动生成的文件有什么区别
gcore
?进程将一些数据写入 RAM 中的某处。我能否确定数据将(始终)被访问并保存在使用
gcore
命令生成的核心文件中?如果没有,为什么?它取决于什么?
答案1
核心文件包含进程虚拟内存中特定于该进程的所有部分,通常是数据段和堆栈段。它不包括包含可执行代码的文本段——当您想要调试核心文件时,您必须告诉调试器正在运行什么程序。
您可以在以下位置找到内容的详细说明:ELF 核心文件剖析