我正在尝试捕获一个信号,以便我可以使我们的程序优雅地退出。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标志。