处理信号保持崩溃点

时间:2017-02-01 18:23:02

标签: c++ crash signals posix core

伙计们,我想处理像SIGSEGV这样的信号,但仍然会使应用程序崩溃,因此我可以获得核心转储。

在我的方法中,在我的信号处理程序中,我取消注册信号处理程序,因此我可以使应用程序崩溃而不是进入循环,下面是示例代码:

#include <iostream>
#include <csignal>
#include <unistd.h>

using namespace std;

void signalHandler( int signum )
{
   signal(SIGFPE, SIG_DFL);
   raise(signum); // <-- should I keep this line?
}

int main ()
{
   signal(SIGFPE, signalHandler);  

   int a, b=2, c=0;
   a=b/c;

   return 0;
}

现在问题:

我不确定是否应该保留raise行。做了一些测试我发现如果我保留或不保留这两种情况,我会让gdb指向有问题的行a=b/c;,但是我不太明白。

有意义的是,如果我不调用raise,将在信号处理程序之后重新执行违规行,因此我将获得我期望的核心转储,但是如果我手动调用{{ 1}}我所期望的是违规行是调用raise的行。有人可以对此有所了解吗?

0 个答案:

没有答案