2012-08-13 24 views
0

我的代碼爲output a minidump,當我的進程有一個異常時,但我想將該代碼移動到父進程,以便一個不會破壞另一個。如何在崩潰時爲子進程創建一個小型轉儲?

一個如何去(1)偵聽來自包裝工藝子進程崩潰,並(2)寫轉儲結果?對於包裝程序來說,C++似乎是最自然的語言選擇,但.NET也是我的選擇(我的應用程序是混合C#/ C++)。

回答

1

據我所知,只有兩種方法可以做到這一點。一個是使用調試API來「調試」子進程,並在遇到異常時寫入一個小型轉儲。我從來沒有嘗試過這個,但是我聽說它可能會導致問題,因爲調試器API並非真正用於這種方式。

另一種是在父進程和子進程之間建立一個通信通道,然後在子進程中註冊一個未處理的異常過濾器,通知父進程寫一個小型轉儲。 Firefox和Chrome都使用此方法通過Breakpad庫爲其子進程進行異常處理。如果您想使用Breakpad,那麼您將在父進程中使用CrashGenerationServer類,並在子進程中處理ExceptionHandler constructor,該進程將管道名稱或管道句柄作爲與CrashGenerationServer的通信通道的另一端。