防止 "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 检查属于这一类)。
我想知道是否有一种方法可以在抛出异常时自动完全终止程序,而不必在 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 检查属于这一类)。