当前位置: 首页 > news >正文

.Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter

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文件,一切都好办了。对吧?!

源代码奉上:点我下载

 

转载于:https://www.cnblogs.com/HouZhiHouJueBlogs/p/3949028.html

相关文章:

  • [转]Open Data Protocol (OData) Basic Tutorial
  • mysql 语句总结
  • 8.15 linux基础命令 软件安装
  • redis的主从配置 扩容
  • c++类与初始化,const
  • 想看的书
  • 一个简单实用的图片切换小例子
  • 扫描线概览
  • 模拟地与数字地(转)
  • 转函数重载之const
  • jeroMq示例之[2] [req-rep-envelopes msg identity]
  • IOS开发之 归档总结
  • 创建App IDs时选择App ID Prefix才能勾选push notifications
  • [Linux] day07——查看及过滤文本
  • TranslateAnimation详解
  • avalon2.2的VM生成过程
  • Facebook AccountKit 接入的坑点
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Vue 动态创建 component
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue-cli在webpack的配置文件探究
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 你不可错过的前端面试题(一)
  • 前端临床手札——文件上传
  • 微服务核心架构梳理
  • 一些关于Rust在2019年的思考
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 云大使推广中的常见热门问题
  • ​secrets --- 生成管理密码的安全随机数​
  • # .NET Framework中使用命名管道进行进程间通信
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #AngularJS#$sce.trustAsResourceUrl
  • (2015)JS ES6 必知的十个 特性
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (九十四)函数和二维数组
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (转)关于多人操作数据的处理策略
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ****Linux下Mysql的安装和配置
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .chm格式文件如何阅读
  • .describe() python_Python-Win32com-Excel
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 读取 JSON格式的数据
  • .net6Api后台+uniapp导出Excel
  • .NET基础篇——反射的奥妙
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @SpringBootApplication 包含的三个注解及其含义