2017-07-03 69 views
1

僅適用於StackOverflow-exception,我在從裝載了CLR的進程配置AddVectoredExceptionHandler時努力創建MiniDump。CLR/VectoredExceptionHandler/StackOverflowException/MiniDumpWriteDump

我的處理程序被調用,將.dmp文件被創建,但隨後MiniDumpWriteDump失敗。

我沒有問題,寫了其他異常,例如轉儲AccessViolation。如果CLR未加載並且發生了StackOverflow-exceptin,那麼我也會成功寫入轉儲。

https://github.com/NicolaiNyberg/DbgSvcExtension 上提供示例代碼,其中CrashHandler dll項目配置處理程序,SoexCh.Cs是從C#中調用的示例。

我的問題是:一旦CLR加載,可防止在StackOverflow上的異常的情況下編寫一個小型轉儲過程中有什麼相對於未處理的異常處理程序會發生什麼?

+1

沒有足夠的堆棧空間放置,使MiniDumpWriteDump()來完成其工作。可靠的小型生產需要一個「警戒過程」。像DebugDiag一樣。 –

+0

感謝漢斯。我剛剛閱讀了你的答案,並且我意識到我的答案/解決方案是實施你的建議。 –

回答

0
從問題

感動的解決方案來回答:

接聽/解決方案:爲了MiniDumpWriteDump從撞碎的堆棧(StackOverflow上的異常)成功,那麼就應該從被從信號工作者線程調用ExceptionHandler。 CrashHandler已經更新了這個實現。

+0

其實,這_really_應該是在一個單獨的看門狗程序(如漢斯在他的評論暗示)。雖然一個單獨的線程可能會爲計算器錯誤工作,它可能沒有足夠的統計腐敗的東西(如訪問衝突),可以軟管整個(目標/受害者)的過程。 –