Я пытаюсь написать набор тестов для компилятора (LLVM), и он прекрасно работает на любой платформе, кроме Windows.В Windows я получаю окно сообщения «обработчик критической ошибки», которое останавливает тесты на неопределенное время.
Эта проблема делает тестирование очень трудным, потому что с компиляторами проблема часто означает недопустимый код на уровне сборки,и, следовательно, сумасшедшие, непредсказуемые ошибки.
Я обнаружил Во время вызова подпроцесса перехватывайте критические ошибки Windows в Python вместо того, чтобы позволить ОС обрабатывать их, показывая всплывающие окна с ошибками во время поискаответ, но это не работает для меня.Я все еще получаю окна сообщений при тестировании.
Документация по [SetErrorMode] (http://msdn.microsoft.com/en-us/library/ms680621(VS100).aspx) говорит, что:
SEM_FAILCRITICALERRORS:
Система не отображаетсяокно сообщения обработчика критических ошибок. Вместо этого система отправляет ошибку вызывающему процессу.
SEM_NOGPFAULTERRORBOX:
Система не отображает диалоговое окно отчетов об ошибках Windows.
КаждоеУ процесса есть связанный режим ошибок, который указывает системе, как приложение будет реагировать на серьезные ошибки. Дочерний процесс наследует режим ошибок своего родительского процесса.
Однако после вызова SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX)
и запуская процесс с CreateProcess
с dwCreationFlags = CREATE_NEW_CONSOLE
, я все еще получаю коробки, когда подпроцессы терпят неудачу.
В случае, если это имеет значение, точный код Python, который я использую:
import ctypes
# 3 is SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX
ctypes.windll.kernel32.SetErrorMode(3)
Как мне это исправить?