0

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

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有问题,但其他应用程序正确保存核心文件,那么这个问题的原因是什么?

提前感谢。

4

1 回答 1

2

mdb忠实地报告核心出现问题。当映射无法转储时,Solaris 会设置一个标志 ( PF_SUNW_FAILURE) 指示它失败,并errno改为存储 - 这是您看到的“中断的系统调用”,错误号指示每个映射无法转储的原因。

到达这里的最常见方法是在转储核心时向进程发出信号,中止转储。不过,我不认为 Oracle Solaris 提供了一种确定的方法来确定发生了什么,或者任何其他关于为什么映射无法转储的线索。如果您的进程很大和/或在任何类型的系统下运行以自动重新启动或监视它(我认为,但不确定,即使是 SMF 也会杀死一个需要足够长时间转储的进程,导致转储中止,例如),我怀疑它是在转储核心时发出信号,而不是出现其他问题。

如果您确定在转储核心时没有收到信号,那么正在发生的事情会导致对正在转储核心的文件系统的写入失败EINTR,并且可能不容易确定是什么。

于 2013-05-09T04:25:29.003 回答