【发布时间】:2019-10-10 09:46:27
【问题描述】:
我们有一些已知会不时崩溃的代码,导致资源处于无效状态。我正在编写测试,旨在确保我们拥有的清理代码能够可靠地确定资源是否无效,如果是,则重置它们。据我所知,没有办法模拟这些资源的状态而不实际使程序崩溃,因为我们无法控制的类的析构函数会关闭它们。
因此,我的测试产生了一个获取资源并调用std::abort 的子进程。这一切似乎都运行良好,并且测试正在 Linux 和 macOS 上通过。但是,Windows 上不断弹出以下对话框:
我可以通过在发布模式下运行测试来避免这种情况,但如果出现问题,我希望能够调试它们。因为我正在生成多个子进程并且时间非常重要,所以对话框会主动妨碍调试。以下是我尝试过的。在调试模式下,如何让中止调用不导致对话框出现?
#include "Windows.h"
#include "errhandlingapi.h"
#include <cstdlib>
int main()
{
SetErrorMode(SEM_FAILCRITICALERRORS |
SEM_NOGPFAULTERRORBOX |
SEM_NOALIGNMENTFAULTEXCEPT);
std::abort();
}
【问题讨论】:
-
你试过
std::quick_exit吗? -
@FrançoisAndrieux 我不知道该功能存在。这正是我一直在寻找的!我会接受这个答案,或者如果你太忙我可以发布它?
标签: c++ windows error-handling