У нас есть код, который время от времени вызывает сбой, оставляя ресурсы в недопустимом состоянии.Я пишу тесты, предназначенные для того, чтобы убедиться, что имеющийся у нас код очистки достоверно определит, являются ли ресурсы недействительными, и, если это так, сбросит их.Насколько я могу судить, невозможно смоделировать состояние этих ресурсов без фактического сбоя программы, потому что деструкторы классов вне нашего контроля закрывают их.
Таким образом, мои тесты порождают дочерний процесскоторый получает ресурс и звонит std::abort
.Кажется, все это работает нормально, и тесты проходят на Linux и macOS.Однако в Windows появляется следующее диалоговое окно:
Я могу избежать этого, запустив тесты в режиме выпуска, но я хочу иметь возможностьотладить их, если что-то пойдет не так.Поскольку я порождаю несколько дочерних процессов и время очень важно, диалог активно мешает отладке.Вот что я попробовал.Как я могу получить вызов, чтобы прервать, чтобы не привести к появлению диалогового окна в режиме отладки?
#include "Windows.h"
#include "errhandlingapi.h"
#include <cstdlib>
int main()
{
SetErrorMode(SEM_FAILCRITICALERRORS |
SEM_NOGPFAULTERRORBOX |
SEM_NOALIGNMENTFAULTEXCEPT);
std::abort();
}