当我的 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++ 应用程序崩溃时,如何避免弹出错误对话框的主要内容,如果未能解决你的问题,请参考以下文章