* nix系统中的内存映像是什么?

时间:2015-09-18 15:38:15

标签: linux unix process operating-system signals

Unix环境中的高级编程第3版,第10章 - 信号,第315页中,当谈到接收信号的过程所采取的行动时,作者说

  

当默认操作标记为“terminate + core”时,表示进程的内存映像保留在进程当前工作目录的名为 core 的文件中。

什么是记忆图像?什么时候创建它,它的内容是什么,它用于什么?

2 个答案:

答案 0 :(得分:2)

内存映像只是进程虚拟内存的一个副本,保存在文件中。它在调试程序时使用,因为您可以检查程序变量的值并确定在失败时调用哪些函数。

正如您引用的文档所述,由于信号具有" terminate + core"而在终止进程时会创建此文件。默认操作。'

答案 1 :(得分:1)

记忆图像通常称为核心图像。请参阅core(5)core dump wikipage。

总的来说,核心图像描述了崩溃时的进程virtual address space(和内容)(包括每个活动线程的call stacks和全局数据和堆的可写数据段,但通常不包括文本或code segments,它们是只读的,并在可执行文件ELF或共享库中给出。它还包含register状态(对于每个线程)。

名称core只有像我这样的老人才能理解(看过1960年代和1970年代建立的计算机,如IBM/360PDP-10早期 PDP-11,两者都用于开发primordial Unix,因为很久以前(1950-1970)随机访问内存是用magnetic core memory制作的。

如果您使用调试信息编译了所有源代码(例如使用gcc -g -Wall),您可以执行一些事后验证debugging(在yourprogram崩溃后转储core使用gdb作为

的文件!)
gdb yourprogram core

并且您尝试的第一个gdb命令可能会bt获得回溯。

不要忘记启用核心转储,setrlimit(2)系统调用通常在您的shell中完成,例如ulimit  -c

有几个信号可以转储核心,请参阅signal(7)。一个常见的原因是segmentation violation,就像你取消引用NULL或坏指针一样,它会发出一个SIGSEGV信号,该信号(经常)在当前目录中转储core个文件

另见gcore(1)