当我的 MSVS C++ 应用程序崩溃时,如何避免弹出错误对话框

Posted

技术标签:

【中文标题】当我的 MSVS C++ 应用程序崩溃时,如何避免弹出错误对话框【英文标题】:How do I avoid popping up an error dialog when my MSVS C++ app crashes 【发布时间】:2009-12-02 12:07:02 【问题描述】:

当我的 Visual Studio 2008 C++ 命令行应用程序崩溃时,它有时会生成此对话框。

CommandProcessor.exe 遇到问题需要关闭。

对于给您带来的不便,我们深表歉意。如果您正在处理某事,您正在处理的信息可能会丢失。有关此错误的更多信息,请单击此处。

我在 Release 和 Debug 模式下都试过了。

(顺便说一下,调试器显示这是被零除错误。)

如果它会崩溃,我不想要这个阻止应用程序的对话框。如何编译我的应用程序以使崩溃不会产生对话框?

【问题讨论】:

一个事后分析对话框怎么会阻止一个已经死掉的应用程序? 具有讽刺意味的是,这是真的 - 程序即将完成,但有一个消息框。这对于自动化构建来说是个大问题。 【参考方案1】:

使用 /EHa 选项,您可以使用 catch(...) 捕获所有异常,包括结构化异常并编写控制台消息。您也可以使用 VC++ - 特定的 __try 来代替结构化异常处理,但这有点难以编码。

但是,这不会保护您免受 C++ 运行时调用 terminate() 的情况的影响——例如在堆栈展开期间异常逃脱析构函数时——您还必须通过调用 set_terminate() 来更改 terminate() 处理程序。

【讨论】:

/EHa 最好通过 Project -> Properties -> Configuration properties -> C/C++ -> Code Generation -> Enable c++ exceptions 设置。见***.com/questions/623373/catching-exception-in-code【参考方案2】:

阅读系列文章Exception Handling and Crash Reporting。可以根据需要捕获异常并对其进行处理(例如,您可以保存故障转储)。

【讨论】:

以上是关于当我的 MSVS C++ 应用程序崩溃时,如何避免弹出错误对话框的主要内容,如果未能解决你的问题,请参考以下文章

ios 13 SwiftUI向后导航时如何避免导航视图内的TabView应用崩溃

在SSIS中使用Renci时如何避免崩溃

我的程序崩溃时如何自动生成堆栈跟踪

如何在 C++ 中跟踪无效指针?

如何避免我的应用程序在后台运行并跟踪我的位置时被终止?

如何避免由于内存不足导致的gcc崩溃