...有点儿。正如这个极其简单的例子所示,
很少(到目前为止仅报告一次),我的一个应用程序以这种方式崩溃。当发生非特定异常时,我想像往常一样终止它。我的策略是(低级)记录问题,然后终止。该应用程序是子系统的一部分,如果检测到任何问题,我想(重新)启动它。它使用 C++-Builder 6 构建并在 Windows (XP...7, 也是 8) 上运行。我了解到abort()
最有可能导致错误消息。该应用程序有一个 GUI,这就是为什么会显示一个消息框而不是仅仅向stderr
.
只要消息框不被用户接受,我的应用程序就会明显地运行,例如它处理计时器(上面示例中的生命周期增加)或进程间消息,完全不知道这个问题。
在阅读了一些答案后,什么是使 C++ 程序崩溃的最简单方法?和raise(SIGABRT) 和 abort() 方法之间的区别,我尝试了以下
void mySignalHandler(int sig)
{
// low-level error reporting here
exit(-1);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
signal(SIGABRT, mySignalHandler);
// some more initialisation here
}
如果或被调用,这也可以让我的应用程序正确终止。(我还希望阻止 Windows“寻找问题的解决方案”。)abort()
raise(SIGABRT)
从您的角度来看,这(为 abort 注册一个信号处理程序并在那里调用 exit)可靠吗?...或者至少可以建立一些东西?