我有一個調用混合模式C++ dll的C#應用程序。我通過HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Windows Error Reporting \ LocalDumps啓用了轉儲生成。禁用.NET本機異常處理
當dll訪問無效內存時,運行時將win32異常轉換爲受管System.AccessViolationException,並在生成轉儲之前展開堆棧,銷燬本地堆棧信息。根據msdn的說法,在.NET獲取並手動生成轉儲之前,我可以自己捕獲異常,但在已經損壞的程序上運行代碼可能會掛起它。那麼,我該如何禁用SEH翻譯呢?
謝謝你的回答,但AppDomain.UnhandledException與返回託管代碼之前捕獲異常的問題相同:進程已損壞,並且試圖在進程本身內生成轉儲可能會掛起。 – 2013-03-21 18:47:42
當然,這很有可能。進程狀態可能被破壞,繼續運行代碼不再可能。例如,由於損壞的進程堆造成的崩潰會導致堆被鎖定。你需要另一個武器,用另一個進程生成minidump。無論是通過Taskmgr.exe還是像[SysInternals'ProcDump](http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx) – 2013-03-21 19:18:20
這樣的實用程序,Windows錯誤報告都已配置爲在外部生成轉儲。問題在於,如果未處理異常,它會生成轉儲,但.Net處理它並銷燬上下文。 AFAIK,ProcDump也遭受這個問題。 – 2013-03-22 18:55:44