.Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
2014-09-03 11:59
260 查看
dump文件相信有些朋友已经很熟悉了,dump文件的作用在于保存进程运行时的堆栈信息,方便日后排查软件故障,提升软件质量。关于dump分析工具windbg、adplus的文章更多了,如果您还不知道怎么使用请移步:
使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题
一般来讲,我们想知道当时程序崩溃的相关信息,同时弹出友好对话框,当用户点击OK后关闭程序。简陋的讲就像这样:
那么最关键的事情来了,怎么记录程序崩溃的相关dump信息呢?!
强势引入:dbghelp.dll。它是微软Debug Help Library库的一部分,它包含了一套支持调试程序,让您在移植可执行(PE)格式的可执行映像的工作。更多信息请移步MSDN。
调用它,您就可以直接生成Dump文件,记录程序当时的运行镜像。
它的方法API如下:
如何使用呢?!好吧,我知道大家都喜欢偷懒,我已经写成了类,大家直接调用一下就OK了。就像这样:
无图无真相,对比下未使用TopLevelEH前的程序:
和使用TopLevelEH后:
这里得提醒一下,调试模式是无效的,具体看我的上一篇。好了,接下来有了Dump文件,一切都好办了。对吧?!
源代码奉上:点我下载。
使用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文件,一切都好办了。对吧?!
源代码奉上:点我下载。
相关文章推荐
- Microsoft .Net中的异常处理
- ASP.NET Forum 中禁用含有子版块的版块后产生的"未将对象引用设置到对象的实例"异常的处理方法
- ASP.NET中的事务处理和异常处理
- [ASP.NET学习笔记之二十六]C#的异常处理
- C#.Net开发基于Oracle数据库系统常见异常处理
- ASP.NET中的事务处理和异常处理
- Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常
- Scott Mitchell 的ASP.NET 2.0数据教程之十八:: 在ASP.NET页面中处理BLL/DAL层的异常
- Lucene.net中的异常处理
- [导入]ASP.NET中的事务处理和异常处理
- ASP.NET中的事务处理和异常处理
- asp.net指定页处理所有异常的几种方法
- asp.net调用Console程序,异常未结束的处理。
- Asp.net 2.0的异常处理需要考虑的问题
- ASP.NET Forum 中对异常:"对象名 'Moderators' 无效" 的处理
- 代码阅读总结之Fitch and Mather 7.0(asp.net发生异常或错误时错误提示页面的处理方法)
- Enterprise Library Step By Step系列(十二):异常处理应用程序块——进阶篇
- ASP.NET中的事务处理和异常处理
- ASP.NET中的事务处理和异常处理
- Asp.net 2.0的异常处理需要考虑的问题