.Net高階異常處理第二篇~~ dump進階之MiniDumpWriter

dump文件相信有些朋友已經很熟悉了,dump文件的做用在於保存進程運行時的堆棧信息,方便往後排查軟件故障,提高軟件質量。關於dump分析工具windbg、adplus的文章更多了,若是您還不知道怎麼使用請移步:html

使用Windbg找出死鎖,解決生產環境中運行的軟件不響應請求的問題windows

ADPlus簡介

這裏接個人上篇文章:送專利啦~~ .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文件,一切都好辦了。對吧?!

源代碼奉上:點我下載

相關文章
相關標籤/搜索