【问题标题】:Empty core file on SolarisSolaris 上的空核心文件
【发布时间】:2013-05-07 12:56:40
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 你的ulimit -c是什么

标签: c++ solaris core


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2014-04-06
    相关资源
    最近更新 更多