dump文件相信有些朋友已經很熟悉了,dump文件的作用在於保存進程運行時的堆棧信息,方便日后排查軟件故障,提升軟件質量。關於dump分析工具windbg、adplus的文章更多了,如果您還不知道怎么使用請移步:
使用Windbg找出死鎖,解決生產環境中運行的軟件不響應請求的問題
ADPlus簡介
這里接我的上篇文章:送專利啦~~ .Net高階異常處理之TopLevelEH 繼續講,捕捉到異常之后我們該怎么辦。
一般來講,我們想知道當時程序崩潰的相關信息,同時彈出友好對話框,當用戶點擊OK后關閉程序。簡陋的講就像這樣:
MessageBox.Show("程序崩潰啦。。"); Environment.Exit(Environment.ExitCode);
那么最關鍵的事情來了,怎么記錄程序崩潰的相關dump信息呢?!
強勢引入:dbghelp.dll。它是微軟Debug Help Library庫的一部分,它包含了一套支持調試程序,讓您在移植可執行(PE)格式的可執行映像的工作。更多信息請移步MSDN。
調用它,您就可以直接生成Dump文件,記錄程序當時的運行鏡像。
它的方法API如下:
[DllImport("dbghelp.dll", EntryPoint = "MiniDumpWriteDump", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
static extern bool MiniDumpWriteDump(IntPtr hProcess, uint processId, SafeHandle hFile, uint dumpType, ref MiniDumpExceptionInformation expParam, IntPtr userStreamParam, IntPtr callbackParam); // Overload supporting MiniDumpExceptionInformation == NULL [DllImport("dbghelp.dll", EntryPoint = "MiniDumpWriteDump", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)] static extern bool MiniDumpWriteDump(IntPtr hProcess, uint processId, SafeHandle hFile, uint dumpType, IntPtr expParam, IntPtr userStreamParam, IntPtr callbackParam);
如何使用呢?!好吧,我知道大家都喜歡偷懶,我已經寫成了類,大家直接調用一下就OK了。就像這樣:
MiniDumpHelper.Write(@"C:\1.dmp", MiniDumpHelper.Option.WithFullMemoryInfo);
無圖無真相,對比下未使用TopLevelEH前的程序:
和使用TopLevelEH后:
這里得提醒一下,調試模式是無效的,具體看我的上一篇。好了,接下來有了Dump文件,一切都好辦了。對吧?!
源代碼奉上:點我下載。