Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何预测流程的规模';在用GDB生成核心文件之前?_Linux_Debugging_Memory_Gdb_Core - Fatal编程技术网

Linux 如何预测流程的规模';在用GDB生成核心文件之前?

Linux 如何预测流程的规模';在用GDB生成核心文件之前?,linux,debugging,memory,gdb,core,Linux,Debugging,Memory,Gdb,Core,如何根据例如/proc/pid/maps、/proc/pid/coredump\u filter、由top显示的值(如VIRT RES等)预测核心文件的大小 一般来说,核心文件的大小取决于什么,文件具体包含什么(虚拟地址空间的哪些部分?) 我对核心文件可能小于VIRT或/proc/pid/maps中所有内存范围的总和这一事实感到有点困惑,因此我怀疑该文件不完整 如何根据例如/proc/pid/maps、/proc/pid/coredump\u filter、top-like-VIRT-RES等显

如何根据例如
/proc/pid/maps
/proc/pid/coredump\u filter
、由
top
显示的值(如
VIRT RES
等)预测核心文件的大小

一般来说,核心文件的大小取决于什么,文件具体包含什么(虚拟地址空间的哪些部分?)

我对核心文件可能小于
VIRT
/proc/pid/maps
中所有内存范围的总和这一事实感到有点困惑,因此我怀疑该文件不完整

如何根据例如/proc/pid/maps、/proc/pid/coredump\u filter、top-like-VIRT-RES等显示的值来预测核心文件的大小

上限是
/proc/$$/maps
中所有映射的总和。但是,通常只读映射不会保存在
核心
中(假设在使用
核心
时,映射的文件将以只读方式可用)

下限是
/proc/$$/maps
中所有可写映射的总和。这是一个下限,因为内核通常也会转储可执行只读映射的第一页,这就是linker
BUILD\u ID
ELF note所在的位置。该注释允许GDB找到所使用的可执行文件或共享库的正确版本,即使系统已更新为较新版本
core
还包含每个线程的寄存器转储。ELF格式本身也有一些开销

VIRT和RES通常不是一个好的估计值:VIRT“太大了”——它包含只读映射,以及
mmap
ed到进程中但实际上没有被分页的页面。如果部分内存被调出,RES可能太小

我对核心文件可能小于VIRT或/proc/pid/maps中所有内存范围的总和这一事实感到有点困惑,因此我怀疑该文件不完整

如上所述,
core
小于
VIRT
,并且
/proc/pid/maps
中所有内存范围的总和是正常和预期的

最后,如果你真的希望在实际倾倒内核之前找到一个相当精确的估计,你可能希望研究谷歌