我正在开发一个多平台C ++模糊测试应用程序。该应用程序生成子进程并检查它是否意外停止。我已经设法在linux上做到这一点,但是,Windows异常处理机制对我来说很难。
我的代码现在执行以下操作: - 调用CreateProcess来生成进程。 - WaitForSingleObject等待它终止。 - 然后调用GetExitCodeProcess并检查退出代码是否对应于异常。
一切正常,我已经使用null解除引用测试应用程序对其进行了测试,我可以优雅地捕获异常。但是,每次测试时,Windows错误消息框都会生成告诉我发送或不发送错误报告。由于模糊器应该是一个自动测试应用程序,我需要以某种方式禁用此通知,这样即使发现异常,模糊器也可以继续测试。
我已经尝试过安装SEH处理程序,但没有运气(显然这些处理程序不是由子进程继承的)。我已经阅读了一些关于使用向量异常处理的内容,但是假设它是相同的,我相信矢量处理程序不会被继承。
有人可以帮我解决这个问题吗?我不知道该搜索什么,我已经google了很多,并没有发现任何问题。
谢谢!
答案 0 :(得分:2)
答案 1 :(得分:2)
根据frast的回答,您可以将流程作为具有合适SetErrorMode的流程的子生成。这个(可继承的)设置决定了哪些错误会导致对话框弹出 - 我在尝试为自动化测试应用程序完成同样的事情时发现了你的问题。
要避免任何错误对话框,请使用
SetErrorMode(
SEM_FAILCRITICALERRORS
| SEM_NOALIGNMENTFAULTEXCEPT
| SEM_NOGPFAULTERRORBOX
| SEM_NOOPENFILEERRORBOX);
注入可能有点过分 - 最好使用包装器进程。
答案 2 :(得分:1)
尝试将以下代码注入您的子进程:
SetErrorMode(SEM_NOGPFAULTERRORBOX);
在MSDN中查找SetErrorMode的详细信息。
在这里阅读注射技术: Injective Code inside Import Table