我的程序不时崩溃,并转储核心。但是,当我尝试从核心文件获取堆栈时,得到以下结果:

mdb: core file data for mapping at 100000000 not saved: Interrupted system call
mdb: core file data for mapping at 100250000 not saved: Interrupted system call
mdb: core file data for mapping at 10035a000 not saved: Interrupted system call
mdb: core file data for mapping at 100360000 not saved: Interrupted system call
mdb: core file data for mapping at 100440000 not saved: Interrupted system call
mdb: core file data for mapping at 100446000 not saved: Interrupted system call
mdb: core file data for mapping at 100450000 not saved: Interrupted system call
mdb: core file data for mapping at 100800000 not saved: Interrupted system call


我以为mdb存在一些问题,但是其他应用程序正确地保存了核心文件,那么这可能是什么原因呢?

提前谢谢。

最佳答案

mdb忠实地报告核心存在问题。当映射转储失败时,Solaris会设置一个标志(PF_SUNW_FAILURE)表示失败,并存储errno -这是您正在看到的“中断的系统调用”,errno表示每个映射转储失败的原因。

到达此处的最常见方法是在转储核心时通知进程,从而中止转储。我不认为Oracle Solaris提供了确定这种情况的确切方法,也没有提供任何关于映射转储失败的线索。如果您的进程很大并且/或者在任何类型的系统上运行以自动重新启动或监视它(我认为但不确定,即使SMF也会杀死花费足够长时间进行转储的进程,从而导致转储中止,例如),我怀疑它是在转储核心时发出信号的,而不是其他出现问题的信号。

如果确定在转储内核时未收到任何信号,则说明正在发生某些事情,导致对转储内核的文件系统进行写操作失败EINTR,并且可能很难确定是什么。

关于c++ - Solaris上的核心文件为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16419641/

10-13 09:08