如何获取信号以捕获SIGABRT



我正在尝试捕获一个信号,以便我可以使我们的程序优雅地退出。SIGABRT发生在我们读取坏文件时,我们无法控制。这是一个多平台程序,所以我们需要在windows, linux和mac上工作的东西。

由于某种原因,当我添加一个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
}

谢谢!

您所描述的行为已被记录。

来自Visual Studio文档中的abort(重点是我的):

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

最新更新