深度解析windows调试技术之一 [抓取user mode dump文件的几重境界]

抓取user mode dump文件的几重境界


导读
记得去年对一些朋友说过要写一些调试技术相关的文章,但是后来出于种种原因吧,还是没写成。最近终于有些时间,希望可以把这些文章补上。对于软件开发而言,调试无疑是最重要的部分之一,而对于windows 系统而言,dump文件无疑是问题发生时最全面的信息,对于一些问题而言,在对的时候抓取对的.dump文件基本上就相当于解决了一大半的问题。本文由浅入深的介绍了用户模式下抓取.dump文件的几种方式,希望对日夜奋战在加班线上的朋友有所帮助。

入门级-目标是问题发生的时候手动可以抓到dump文件

1. 当问题发生的时候使用windbg attach 到相关的进程然后使用.dump /ma 命令抓取 dump 文件。
2. 当问题发生的时候使用adplus.vbs/adplus.exe –hang 抓取相关进程的dump 文件。
入门级的方法最大的缺点就是要等到问题发生的时候才能去手动抓取.dump文件,如果问题不易重现,那么人们就不得不坐在电脑前等待问题的发生,好惨。

进阶级-目标是crash 发生的时候或者进程退出的时候可以自动抓到dump文件
1. 在问题发生的之前使用adplus.vbs/adplus.exe –crash监控相关进程的, 值得注意的是这个方法不需要手动去抓,只要crash或者进程退出,OS会自动为我们抓取dump文件,再也不用坐在显示器前等待了,来杯咖啡等着就行了。
2. 使用windbg –I 将windbg设置为即时调试器,这样当问题发生的时候,windbg就会弹出来,直到你处理了为止,同样不需要在显示器前面等待。
生活已经很美好了,但是生活可以更美好,进阶级的缺点是只能抓取crash或者进程退出的dump文件,其他情况无能为力。

高级-目标是定制在什么情况下抓取dump文件

这是最灵活的一种方式,但是也是相对最复杂的一种方式,下面为了便于说明我以一个例子来说明。
这个例子中我的目标是在notepad.exe load VERSION.dll的时候抓一个dump然后让程序继续执行。
首先在gflags的debugger中配置如下脚本:
D:\Debuggers\windbg.exe -c $$><"c:\dscript.ds"
c:\dscript.ds内容如下:
sxe ld:VERSION.dll; g; .dump /ma c:\np.dmp;g;
这个时候只要有notepad.exe开始执行,我们就会在它load VERSION.dll的时候抓取到对应的.dump 文件。
这个方法的优势是明显的,几乎任何问题都可以使用,但是它仍然有一个弊端,就是实际上进程是在调试器下运行的,对一些和性能有关的问题可能会有些影响。


总结


本文介绍的这几种方式由浅入深,各有利弊,对于大部分的调试情况已经足够了,希望对大家有所帮助,当然除了本文介绍的方式,大家还可以选择其他一些工具来抓取dump文件,此处不一一列举,另外对于kernel dump 文件的抓取,由于日常的应用开发用的不多,故本文暂不作介绍,如果感兴趣的朋友多,我再写一篇专门抓取内核dump的文章。

转载于:https://www.cnblogs.com/pugang/archive/2013/02/18/2916211.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

64位系统上编译运行32位程序时如果要访问Access数据库会出现The Microsoft.Jet.OLEDB.4.0 provider is not registered on the local machine错误&#xff0c; 解决方法是&#xff1a;打开项目配置管理器&#xff08;Configuration Manager&#xff09;&#xff0c;将项目的运行…

html语言简单,简单的html语言计算器

《简单的html语言计算器》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《简单的html语言计算器(3页珍藏版)》请在人人文库网上搜索。1、简单的计算器源码如图&#xff1a;代码input.MyButton font-size:16px; background-color: #FF0; width:38px; height:28px;borde…

如何判断当前请求的是健康检查API

前言为了性能监控的目的&#xff0c;我们使用了Middleware记录所有请求的Log。实现代码如下&#xff1a;public class RequestLoggingMiddleware {...public async Task Invoke(HttpContext context){try{await _next(context);}finally{//Log}} }同时&#xff0c;我们在服务中…

Androidz之clickable

在android Button的xml文件属性中有这麽一个属性标签&#xff1a; [html] view plaincopyprint? android:clickable 该标签&#xff08;继承自View的xml属性&#xff09;的值必须是boolean值&#xff0c;即true、false。该标签目的是设置button是否可以被点击。 于是&#x…

这些高校竟因名字太“坑爹”被误会为三本?盘点九所实力强劲但被名字耽误的大学...

全世界只有3.14 % 的人关注了爆炸吧知识有这样一个段子&#xff1a;西北某地一学生&#xff0c;志存高远&#xff0c;矢志从医。首次高考考入泸州医学院&#xff0c;到校后发现不理想&#xff0c;果断返乡复读。一年后成功考入四川医科大学&#xff0c;到校后傻眼了&#xff0c…

VC编程实现IE风格的界面

使用过IE浏览器的朋友都知道IE界面上的扁平工具条、地址栏&#xff0c;扁平工具栏上的按钮正常状态下为扁平态&#xff0c;按钮上的图像为灰色&#xff0c;当鼠标放在按钮上时&#xff0c;按钮突 起&#xff08;这种状态称为手柄&#xff09;&#xff0c;并且其上的图像变得鲜艳…

【全】.net core平台单元/集成测试结果、覆盖率、圈复杂度到可视化HTML报告之路...

.net core 平台的测试框架有好几个可供选择&#xff0c;内置的MSTest框架、NUnit框架以及强大好用的xUnit框架&#xff0c;依托宇宙最强的编辑器Visual Studio&#xff0c;可以开展非常友好的测试以及快乐的展示测试的结果。如果仅限于此&#xff0c;那么这篇文章对你来说就是多…

广义积分1

这几天&#xff0c;突然下了比较大的雪。打算翻出一道积分习题做做。 $$\int_{-\infty}^{\infty}\frac{\cos x}{x^2a^2}\text{d}x$$ 其中$a>0$ 不知道这个积分是从什么问题中被提出来的(会不会是几百年前某些人研究某个东西得到的&#xff1f;)。打算用Residue formula来算,…

哪种HTML列表会自动编号,HTML列表的种类

HTML 支持有序、无序和定义列表无序列表无序列表是一个项目的列表&#xff0c;此列项目使用粗体圆点(典型的小黑圆圈)进行标记。无序列表始于 标签。每个列表项始于 。(推荐学习&#xff1a;HTML入门教程)CoffeeMilk浏览器显示如下&#xff1a;CoffeeMilk列表项内部可以使用段落…

Android之AsyncTask异步任务详解总结

Android 多线程----AsyncTask异步任务详解 【正文】 本文将讲解一下Android的多线程的知识&#xff0c;以及如何通过AsyncTask机制来实现线程之间的通信。 一、Android当中的多线程&#xff1a; 在Android当中&#xff0c;当一个应用程序的组件启动的时候&#xff0c;并且没有其…

docker源码_使用docker、Jenkins、gitlee、springboot、搭建个人博客网站 并实现CI/CD 外加机器人提醒...

看朱成碧思纷纷&#xff0c;憔悴支离为忆君。--- barcke前言:服务器用的是云服务器买的阿里的linux、jdk1.8、docker服务端使用的为阿里的docker镜像仓库、mysql使用5.7版本的、redis使用最新版即可、文件服务使用的阿里的oss.项目采用jib推送docker镜像.附录: git源码地址—-h…

初次见面,如何令人永远难忘

1 初次见面&#xff0c;如何令人永远难忘2 见到熟人和见到偶像的区别3 真正的好朋友是在最紧急的时刻帮你一把的那个人4 当你正在减肥时&#xff0c;你朋友约你出去吃饭5 被这样的友谊感动到了6 等我老了也要和大爷一样做一个时尚的人不说别的大爷好酷↓ ↓ ↓

Android开发之动画(转)

activity跳转的过渡效果&#xff0c;很漂亮&#xff0c;很全 注意&#xff0c;切换方法overridePendingTransition只能在startActivity和finish方法之后调用。第一个参数为第一个Activity离开时的动画&#xff0c;第二参数为所进入的Activity的动画效果淡入淡出效果overridePen…

号称迄今为止最快,.NET6带来了什么?

北京时间11月8号午夜&#xff0c;.NET6正式发布。该版本经历了一万多次Git提交&#xff0c;号称迄今为止最快的.NET&#xff0c;究竟有哪些亮点呢&#xff1f;1LTS版本&#xff0c;发布前经过了长期的线上生产压力测试&#xff1b;2性能提升&#xff0c;包括文件I/O&#xff0c…

linux 文件系统的管理 (硬盘)

RH133—Unit4 文件系统的管理 一、系统在初始化时如何识别硬盘 1、系统初始时根据MBR的信息来识别硬盘&#xff0c;其中包括了一些执行文件就来载入系统&#xff0c;这些执行文件就是MBR里前面446bytes里的boot loader 程式&#xff0c;而后面的16X4的空间就是存储分区表信息的…

JSP的HTML基础实验原理,实验四 JSP基础语法

jsp的一些常用语法实验四 JSP基本语法一、实验目的1. 熟练掌握JSP的声明、表达式、小脚本和注释的使用&#xff1b;2. 理解JSP指令和动作的语法格式&#xff1b;3. 理解JSP页面的生命周期。4. 熟练掌握page指令的下面的属性&#xff1a;import、session、errorPage、isErrorPag…

Android之多线程----异步消息处理机制之Handler详解

一、handler的引入&#xff1a; 我们都知道&#xff0c;Android UI是线程不安全的&#xff0c;如果在子线程中尝试进行UI操作&#xff0c;程序就有可能会崩溃。相信大家在日常的工作当中都会经常遇到这个问题&#xff0c;解决的方案应该也是早已烂熟于心&#xff0c;即创建一个…

colorkey唇釉是否安全_colorkey空气唇釉,19/支

国货之光来喽 !!!!超火的colorkey空气唇釉给你们安排上 !!!R601 酒酿梅子超酷超性感的一支 !!这个颜色是偏调但是不显老的深草莓红 一点都不挑皮 谁涂谁白一个度&#xff5e;厚厚的涂一层气场值upup !R608 焦糖红棕偏橘棕调的红棕板栗 !!薄涂厚涂都显白、显气质&#xff01;味道…

初识Ildasm.exe——IL反编译的实用工具(转自Youngman)

Ildasm.exe 概要&#xff1a; 一.前言&#xff1a; 微软的IL反编译实用程序——Ildasm.exe&#xff0c;可以对可执行文件&#xff08;ex&#xff0c;经典的控制台Hello World 的 exe 可执行文件&#xff09;抽取出 IL 代码&#xff0c;并且给出命名空间以及类的视图。在讲述如何…

就想问问你们,这种女朋友从哪里来的?

1 女朋友从哪里来的2 能养好这宠物的对女朋友包容心肯定不赖3 墙都不扶就服这些停车的人4 成功避过所有的球&#xff0c;将白球打入底袋5 谁知道我六年级经历了什么6 这设计&#xff0c;做到了真正意义上的防盗7 这就是我想要的生活面朝大海、春暖花开我也想梦想成真↓ …