【发布时间】:2010-08-26 08:59:42
【问题描述】:
在单元测试序列中,我正在测试是否捕获到数据损坏错误(故意提供损坏的数据)。
为了将程序崩溃(例如损坏的数据 + 糟糕的缓冲区管理)视为常规失败条件,我使用 CreateProcess 在子进程中运行程序。我的问题是,如果它崩溃了,我会从 Windows 收到一个崩溃报告对话框,我必须关闭它才能继续测试序列。
有什么方法可以使用 CreateProcess 以便我可以吞下 Windows 的崩溃报告?
【问题讨论】:
在单元测试序列中,我正在测试是否捕获到数据损坏错误(故意提供损坏的数据)。
为了将程序崩溃(例如损坏的数据 + 糟糕的缓冲区管理)视为常规失败条件,我使用 CreateProcess 在子进程中运行程序。我的问题是,如果它崩溃了,我会从 Windows 收到一个崩溃报告对话框,我必须关闭它才能继续测试序列。
有什么方法可以使用 CreateProcess 以便我可以吞下 Windows 的崩溃报告?
【问题讨论】:
您不能使用 CreateProcess() 来执行此操作,子程序必须自己处理它。两种基本方式:
__try/__except 关键字来捕获和处理 SEH 异常在任何一种情况下都尽量少做,你不知道程序在心脏病发作时处于什么状态。最好的办法是 SetEvent() 一个命名事件并让您的主进程终止该进程。
【讨论】:
可能最好的计划是至少在测试期间关闭测试机器上的 Windows 错误报告(XP 和更早版本上的 Microsoft 错误报告)。具体步骤取决于您的 Windows 版本,但它位于控制面板下。
【讨论】: