我正在尝试捕捉信号,以便我可以优雅地退出程序。当我们读取一个我们无法控制的错误文件时,会发生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
}
谢谢!
答案 0 :(得分:1)
您描述的行为是记录在案的。
来自Visual Studio documentation for abort(强调我的):
默认情况下,当使用调试运行时库构建应用程序时,中止例程会在引发SIGABRT之前显示错误消息。 [...]要禁止消息,请使用_set_abort_behavior清除_WRITE_ABORT_MSG标志。