【问题标题】:How to swallow crash report when using Win32::CreateProcess使用 Win32::CreateProcess 时如何吞下崩溃报告
【发布时间】:2010-08-26 08:59:42
【问题描述】:

在单元测试序列中,我正在测试是否捕获到数据损坏错误(故意提供损坏的数据)。

为了将程序崩溃(例如损坏的数据 + 糟糕的缓冲区管理)视为常规失败条件,我使用 CreateProcess 在子进程中运行程序。我的问题是,如果它崩溃了,我会从 Windows 收到一个崩溃报告对话框,我必须关闭它才能继续测试序列。

有什么方法可以使用 CreateProcess 以便我可以吞下 Windows 的崩溃报告?

【问题讨论】:

    标签: winapi process


    【解决方案1】:

    您不能使用 CreateProcess() 来执行此操作,子程序必须自己处理它。两种基本方式:

    • 使用 __try/__except 关键字来捕获和处理 SEH 异常
    • 使用 SetUnhandledExceptionFilter() 注册回调

    在任何一种情况下都尽量少做,你不知道程序在心脏病发作时处于什么状态。最好的办法是 SetEvent() 一个命名事件并让您的主进程终止该进程。

    【讨论】:

    • SetUnhandledExceptionFilter 是我们这样做的方式。这样它甚至不会进入“windows错误报告”阶段,你可以让它做你喜欢的事情。
    【解决方案2】:

    可能最好的计划是至少在测试期间关闭测试机器上的 Windows 错误报告(XP 和更早版本上的 Microsoft 错误报告)。具体步骤取决于您的 Windows 版本,但它位于控制面板下。

    【讨论】:

    • 感谢您的提示。但是,由于我未能在问题中指定,该解决方案必须适用于管理界面有限或没有管理界面的环境。例如。自动化测试服务器。这实际上就是为什么测试序列需要在无人看管的情况下进行。
    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2013-07-02
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多