如何获得信号以捕获SIGABRT

时间:2015-10-22 19:35:11

标签: linux windows macos c++11 sigabrt

我正在尝试捕捉信号,以便我可以优雅地退出程序。当我们读取一个我们无法控制的错误文件时,会发生SIGABRT。这是一个多平台程序,所以我们需要在windows,linux和mac中运行的东西。

出于某种原因,当我在signal handling example添加signal_callback_handler并在Windows中运行问题测试时,它仍然像我们之前一样提供中止弹出框。如何在中止弹出窗口之前重定向?我希望我们的程序能够优雅地退出。

//constructor
example::example(const string theString) 
{
   signal(SIGABRT, signal_callback_handler);
}

void example::signal_callback_handler(int sigNum)
{
   //want to handle gracefully here, but it's not getting caught
}

bool example::someMethod()
{
   FileHandle.openFile(problemDocument); //this openFile is where the SIGABRT happens
}

谢谢!

1 个答案:

答案 0 :(得分:1)

您描述的行为是记录在案的。

来自Visual Studio documentation for abort(强调我的):

  

默认情况下,当使用调试运行时库构建应用程序时,中止例程会在引发SIGABRT之前显示错误消息。 [...]要禁止消息,请使用_set_abort_behavior清除_WRITE_ABORT_MSG标志。