Linux:处理分段错误并获取核心转储

当我的应用程序崩溃与分段错误,我想从系统中获得核心转储。 我通过事先configuration来做到这一点

ulimit -c unlimited 

我还想在我的应用程序日志中显示出现分段错误。 我通过使用sigaction()来做到这一点。 但是,如果我这样做,信号没有达到其默认处理,核心转储不保存。

我怎样才能同时从我自己的信号处理器系统核心转储一个日志行?

Solutions Collecting From Web of "Linux:处理分段错误并获取核心转储"

  1. 覆盖SIGSEGV的默认信号处理程序来调用您的自定义日志记录功能。
  2. 记录后,恢复并触发将创建核心转储的默认处理程序。

这是一个使用signal的示例程序:

 void sighandler(int signum) { myLoggingFunction(); // this is the trick: it will trigger the core dump signal(signum, SIG_DFL); kill(getpid(), signum); } int main() { signal(SIGSEGV, sighandler); // ... } 

同样的想法也应该与sigaction工作。

来源: 如何处理SIGSEGV,同时也生成一个核心转储

答案是:用标志SA_RESETHAND设置sigaction,然后从处理程序中返回。 同样的指令再次发生,再次导致分段错误并调用默认处理程序。