防止 "microsoft visual c++ runtime library debug assertion failed" window 在程序崩溃时出现

Prevent "microsoft visual c++ runtime library debug assertion failed" window from appearing upon program crash

我想知道是否有一种方法可以在抛出异常时自动完全终止程序,而不必在 Visual C++ 库中的“中止”、“重试”和“忽略”按钮之间进行选择window那个出现了?

.

(示例图片)

有什么解决办法吗? (除了显而易见的 - 修复我的代码!)

是的,您可以通过将 _OUT_TO_STDERR 传递给 _set_error_mode() 来抑制消息框。 如果您仍然收到一个消息框,告诉您已调用 abort() 而您也想禁用它,您还需要调用 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG)。 完整示例:

#include <cassert>
#include <cstdlib>
#include <crtdbg.h>

int main() 
{
  _set_error_mode(_OUT_TO_STDERR);
  _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
  assert(false);
}

SetBreakOnAssert(false) 以及您可以(并且必须)做的很多其他事情来防止这种情况发生。问题是有许多不同类型的错误机制和错误 windows.

您发布的是一个 ASSERT,您可以使用 SetBreakOnAssert 将其禁用。但是您仍然必须处理错误情况,即终止应用程序。还有其他情况会弹出默认 Windows 对话框。

std::set_terminate 允许您设置一个函数,当您的程序的任何部分想要终止应用程序时(例如由于双重异常),该函数将被调用。

_set_se_translator 允许您指定可以将 Win32 异常(例如“访问冲突”)转换为 C++ 异常的函数。

_set_invalid_parameter_handler 允许您指定一个函数,只要您的程序使用无效参数调用标准函数,就会调用该函数。 (我认为 out-of-bounds 检查属于这一类)。