2010-11-30 98 views
2

我正在开发多平台C++模糊应用程序。该应用程序产生一个子进程并检查它是否意外停止。我已经设法在linux上做到这一点,但是,Windows异常处理机制正在让我感到困难。在窗口上捕获子进程异常

我的代码现在执行以下操作: - 调用CreateProcess来产生该进程。 - WaitForSingleObject等待它终止。 - 然后调用GetExitCodeProcess并检查退出代码是否对应于异常。

一切正常,因为它已经测试了一个空的解除引用测试应用程序,我可以优雅地捕捉异常。但是,每次我测试这个时,Windows错误消息框都会告诉我发送或者不发送错误报告。由于模糊器应该是一个自动测试应用程序,我需要以某种方式禁用此通知,以便即使发现异常,模糊器也可以继续测试。

我已经尝试安装SEH处理程序,但没有运气(显然这些处理程序不是由子进程继承)。我读过一些关于使用向量化异常处理的内容,但假设它是相同的,我相信矢量处理程序不会被继承。

有人能帮我解决这个问题吗?我不知道要搜索什么,我已经搜索了很多,但没有找到任何东西。

谢谢!

回答

2

Debug API是一种选择。 Here是MSDN的起点。

+0

感谢您的回答!我曾想过使用一些调试API,但认为某些使用一些反调试机制来避免破解和/或混响的应用程序可能会在它们检测到它们正在被模糊器调试时修改它们的行为。我想如果我找不到另一个选项,那么我将不得不使用这种调试机制。 – mfontanini 2010-11-30 14:34:28

+0

更有理由去拍摄那些试图对他们的代码进行反向工程验证的人。 – 2010-11-30 14:44:30

2

上frast的答案之后,您可以产卵的过程作为一个过程的孩子用合适的SetErrorMode。这个(可继承的)设置决定了哪些错误会导致对话框弹出 - 我在为自动测试应用程序实现完全相同的事情时发现了你的问题。

为了避免任何错误对话框,使用

SetErrorMode(
    SEM_FAILCRITICALERRORS 
    | SEM_NOALIGNMENTFAULTEXCEPT 
    | SEM_NOGPFAULTERRORBOX 
    | SEM_NOOPENFILEERRORBOX); 

注射可能是矫枉过正 - 更好地使用包装过程。