dump文件相信有些朋友已經很熟悉了,dump文件的做用在於保存進程運行時的堆棧信息,方便往後排查軟件故障,提高軟件質量。關於dump分析工具windbg、adplus的文章更多了,若是您還不知道怎麼使用請移步:html
使用Windbg找出死鎖,解決生產環境中運行的軟件不響應請求的問題windows
這裏接個人上篇文章:送專利啦~~ .Net高階異常處理之TopLevelEH 繼續講,捕捉到異常以後咱們該怎麼辦。工具
通常來說,咱們想知道當時程序崩潰的相關信息,同時彈出友好對話框,當用戶點擊OK後關閉程序。簡陋的講就像這樣:post
MessageBox.Show("程序崩潰啦。。"); Environment.Exit(Environment.ExitCode);
那麼最關鍵的事情來了,怎麼記錄程序崩潰的相關dump信息呢?!ui
強勢引入:dbghelp.dll。它是微軟Debug Help Library庫的一部分,它包含了一套支持調試程序,讓您在移植可執行(PE)格式的可執行映像的工做。更多信息請移步MSDN。url
調用它,您就能夠直接生成Dump文件,記錄程序當時的運行鏡像。spa
它的方法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了。就像這樣:code
MiniDumpHelper.Write(@"C:\1.dmp", MiniDumpHelper.Option.WithFullMemoryInfo);
無圖無真相,對比下未使用TopLevelEH前的程序:orm
和使用TopLevelEH後:
這裏得提醒一下,調試模式是無效的,具體看個人上一篇。好了,接下來有了Dump文件,一切都好辦了。對吧?!
源代碼奉上:點我下載。