C++ 核心文件的大小是否反映了应用程序崩溃时的内存使用情况?

C++ 核心文件的大小是否反映了应用程序崩溃时的内存使用情况?,c++,solaris,core,crash-dumps,C++,Solaris,Core,Crash Dumps,我的应用程序(Sol 10-32位上的C++)崩溃了,应用程序生成的内核大小为4GB。我是否可以假设应用程序在即将崩溃时可能会使用高达4 GB的内存(与核心文件的大小相同)?另外,我的应用程序是独立的,不依赖于任何其他进程 有没有办法用核心文件检查应用程序使用的总内存 从手册页(): 某些信号的默认动作是使进程终止并生成一个核心转储文件,一个包含进程终止时内存映像的磁盘文件 您的代码可能正在使用多线程环境和共享数据 此外: 自内核2.6.23以来,特定于Linux的/proc/PID/cored

我的应用程序(Sol 10-32位上的C++)崩溃了,应用程序生成的内核大小为4GB。我是否可以假设应用程序在即将崩溃时可能会使用高达4 GB的内存(与核心文件的大小相同)?另外,我的应用程序是独立的,不依赖于任何其他进程

有没有办法用核心文件检查应用程序使用的总内存

从手册页():

某些信号的默认动作是使进程终止并生成一个核心转储文件,一个包含进程终止时内存映像的磁盘文件

您的代码可能正在使用多线程环境和共享数据

此外:

自内核2.6.23以来,特定于Linux的/proc/PID/coredump_过滤器文件可用于控制在为具有相应进程ID的进程执行内核转储时将哪些内存段写入内核转储文件


可能通过这一点,您可以了解应用程序使用的内存。

是的,核心文件表示崩溃发生时进程使用的整个虚拟内存区域的转储。具有32位进程的核心文件不能超过4 GB

在Solaris下,可以使用位于
/usr/proc/bin
中的多个命令从核心文件获取信息。特别是:

  • 文件核心
    :将确认核心文件来自您的流程
  • pstack core
    :将告诉您进程崩溃的位置
  • pmap-core
    :将显示每个地址的内存使用情况
通过使用
coreadm
命令,可以限制保存在核心文件中的数据集。默认情况下保存所有内容:

stack+heap+shm+ism+dism+text+data+rodata+anon+shanon+ctf

这并不意味着您的应用程序假定使用4GB内存,它可以是来自其他应用程序的内存转储,与您的ScoreDump相关。正如您所写的,筛选器是特定于Linux的,因此不适用于Solaris。这里的等价物是coreadm。