【发布时间】:2010-09-17 12:54:47
【问题描述】:
我正在尝试为编译器 (LLVM) 编写一个测试套件,它可以在除 Windows 之外的所有平台上完美运行。在 Windows 上,我收到“严重错误处理程序”消息框,它会无限期地停止测试。
这个问题使得测试变得非常困难,因为对于编译器,问题通常意味着汇编级别的无效代码,从而导致疯狂的、不可预测的错误。
我在寻找答案时找到了During a subprocess call, catch critical windows errors in Python instead of letting the OS handle it by showing nasty error pop-ups,但这对我不起作用。测试时我仍然会收到消息框。
[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)
我该如何解决?
【问题讨论】: