2010-11-30 24 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); 

注射可能是矯枉過正 - 更好地使用包裝過程。