IIS调试技术之 Debug Diagnostic (调试诊断)
IIS 调试技术之 Debug Diagnostic (调试诊断)
1 概述
1.1 文档简介
系统出现错误或崩溃,免不了要进行调试。调试能进行的前提是错误能重现,但实际上要重现一个错误有时比重新设计代码还困难,所以在错误出现之时,能够及时把系统状态记录下来是当务之急,即我们所说的抓取 DUMP (内存转储文件)。
如何抓取 DUMP?可以使用 WinDbg 或 Debug Diagnostic Tool 抓取。但是相对而言,使用Debug Diagnostic Tool 抓取更方便,而使用WinDbg分析相对而言更简单和便捷一些,所以本文我们将介绍①Debug Diagnostic Tool手动和自动抓取过程②WinDbg的分析过程。大家可以在平常的测试过程中将Debug Diagnostic Tool这个工具安装在服务器上,开启后设置自动抓取,一定会有你意想不到的收获的。
2 Debug Diagnostic Tool
先介绍一下 Debug Diagnostic Tool,此工具常用的功能主要有两个:抓取 DUMP 和分析 DUMP。另外,它还可以附加到进程进行调试,或是监视内存和句柄的泄漏。可以进行手动抓取DUMP和根据设置自动抓取DUMP。
下面我们就来看看如何使用 Debug Diagnostic Tool 抓取 DUMP。(工具安装很简单,这里不进行介绍)
2.1 手动抓取 DUMP
这里我们将用应用程序池IIS来进行说明的,我们只要在 Debug Diagnostic Tool 中的 Processes 标签页中找到对应的进程名为“w3wp.exe”的进程,然后右键选择“Create Full Userdump”即可。

不过通常情况下,我们会用应用程序池把不同的站点和虚拟目录分开,这时系统里会有多个名为“w3wp.exe”的进程。我们可以在命令提示符下执行“iisapp”,得到进程 ID 与应用程序池的对应关系,然后在 Debug Diagnostic Tool 中根据进程 ID 选取要抓取 DUMP 的进程。

2.2 自动抓取 DUMP
要自动抓取 DUMP,就必须设定一些抓取 DUMP 的条件,当系统状况满足条件时,Debug Diagnostic Tool 会根据要求抓取指定进程的 DUMP。Debug Diagnostic Tool 的抓取条件分三种:Crash(系统崩溃)、Performance
(系统性能资源) 和 Memory and Handle
Leak (内存和句柄泄漏)。
第1步:在工具的 Rules 标签页,点击“Add Rule...”按钮,开始添加一个抓取 DUMP 的规则。由于目前我们系统暴露出来的问题主要是WEB服务器中CPU异常,所以这里我们选择“Performance”。再选择“performance counters”,选择我们要跟踪的服务器性能计数器,下一步。

第2步:在配置选项中,选择我们要跟踪的服务器性能计数器,本次我需要监控的是系统CPU占用率。添加完成后“下一步”。

第3步:比如我们要跟踪 web application pool (WEB应用程序池) 错误,则要在dump target 设置中添加异常设置“web application pool”,将 web application pool name 设置为我们测试的应用程序“ihou.APIServer”。




第4步:在配置选项中,配置进行一系列的配置,即可完成。



第5步:在配置项中在配置“性能监视器的触发特性”,“Rules”中双击上面步骤中所添加的Rules Type,在打开的properties of performance
monitor trigger页中设置DUMP的触发值,至此所有的设置即可完成。

3
分析DUMP
在工具的 Advanced Analysis 标签页,点击“Add Data Files”按钮,选择要进行分析的 DUMP 文件。再选择可用的分析脚本和数据文件,点击“Start Analysis”即可开始分析。第一次进行分析,工具会到微软网站下载调试文件,所以会有点慢。
工具可供使用的分析脚本有两个:Crash/Hang
Analyzers (崩溃/挂起分析) 和 Memory Pressure Analyzers (内存压力分析)。
Crash/Hang 分析的结果会列出各个线程的执行时间,最后调用的 Function 等,如果有线程阻塞,也会给出警告信息。
内存压力分析的结果主要是内存使用情况,如内存碎片率、空闲内存大小、保留内存大小、使用内存大小等,每个模块、线程、堆使用内存的情况都有列出。
这个工具分析 DUMP 的功能不如 WinDbg,具体的分析我们还得用 WinDbg 了。下面我们来介绍一下WinDbg分析功能。

3.1 WinDbg分析功能
前面提过Debug
Diagnostic Tool也可以对DUMP进行分析,只不过相对而言WinDbg更可用一些,但是个人认为DUMP难搞一些,因为通过很多命令来实现的,很多命令是需要上网查的,大家可以根据自己的喜好进行选择,这里简单介绍一下WinDbg的分析功能。
第1步:打开一个dmp文件,点击WinDbg界面上的【File=>Open
Crash Dump...】按钮,来打开一个dmp文件。


第2步:在WinDbg的命令输入框输入相应的命令,得到想要发内容信息。(WinDbg命令很多,网上有命令大全,大家可以参考)。

4
结束语
我们的关键是发现系统缺陷,保存缺陷产生过程中的重要信息,我们可以在日常的测试工作中,时刻关注系统生成的一些重要信息,例如错误日志和这些DUMP文件,将这些错误信息提供给开发工程师进行分析。从目前来看这个工具对我们很重要,所以建议大家学会使用。这里我只给大家简单的引入了工具,更多的使用方法和使用技巧大家可以在网上自行学习和试用哦!
IIS调试技术之 Debug Diagnostic (调试诊断)的更多相关文章
- Windows 反调试技术——OpenProcess 权限过滤 - ObRegisterCallback
转载: https://blog.xpnsec.com/anti-debug-openprocess/ 看雪翻译:https://bbs.pediy.com/thread-223857.htm 本周我 ...
- Windows下反(反)调试技术汇总
反调试技术,恶意代码用它识别是否被调试,或者让调试器失效.恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间.为了阻止调试器的分析,当 ...
- 【转】Linux Shell脚本调试技术
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 本文全面系统地介绍了shell脚本调试技 ...
- shell脚本调试技术_转
转自:http://itlab.idcquan.com/linux/SHELL/727128.html 参考:https://linux.cn/article-8045-1.html 本文全面系统地介 ...
- Shell脚本调试技术
http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟练掌握 ...
- Linux驱动设计—— 驱动调试技术
参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942 ...
- QT核心编程之调试技术 (g)
Qt应用程序的调试可以通过DDD进行跟踪调试和打印各种调试或警告信息.DDD(Data Display Debugger)是使用gdb调试工具的图形工具,它安装在Linux操作系统中,使用方法可参考D ...
- Windows Kernel Way 1:Windows内核调试技术
掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种: (1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功 ...
- Linux kprobe调试技术使用
kprobe调试技术是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术. 利用kprobe技术,可以在内核绝大多数函数中动态插入探测点,收集调试状态所需信息而基本不影响原有执行流程. kpr ...
随机推荐
- NVIDIA GTC照片
这次的NVIDIA GPU Technology Conference 2014在美国San Jose(就是俗称的硅谷了)举办. 去美国的飞机上10个小时反正是睡不着,电影还是挺好看的. 美联航的早餐 ...
- nowcoder(牛客网)提高组模拟赛第一场 解题报告
T1 中位数(二分) 这个题是一个二分(听说是上周atcoder beginner contest的D题???) 我们可以开一个数组b存a,sort然后二分b进行check(从后往前直接遍历check ...
- 南昌网络赛J. Distance on the tree 树链剖分+主席树
Distance on the tree 题目链接 https://nanti.jisuanke.com/t/38229 Describe DSM(Data Structure Master) onc ...
- Mysql数据类型《一》整数类型
数值类型 1. 整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用:存储年龄,等级,id,各种号码等 ======================== ...
- Java反射机制与工厂模式
工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...
- python 导入模块与使用
学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...
- c语言-汉诺塔递归调用
#include<stdio.h> int main() { void hano_tower(int n,char one,char two,char three); int m=0; p ...
- 条目二十六《iterator优先于const_iterator、reverse_iterator以及const_reverse_iterator》
条目二十六<iterator优先于const_iterator.reverse_iterator以及const_reverse_iterator> 这几个东西不是类型来的,而是不同的类,所 ...
- Linux新手随手笔记1.9-使用Apache搭建网站
搭建网站 网站服务:让用户能够通过浏览器访问到的服务器上的文档资源. 对比Windows 和Linux部署服务方法对比 Windows:IIS Linux :Apache ,nginx Ap ...
- vue,下级页面刷新导致路由跳转带过来的数据消失的解决方法
if(typeof(this.$route.query.result)=='string'){ //刷新时走这 }else{ //正常路由跳转过来后就把数据塞到 localStorage let ob ...