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 ...
随机推荐
-
GridView/DataGrid行单击和双击事件实现代码_.Net教程
功能: 单击选中行,双击打开详细页面 说明:单击事件(onclick)使用了 setTimeout 延迟,根据实际需要修改延迟时间 ;当双击时,通过全局变量 dbl_click 来取消单击事件的响应 ...
-
android sdk下载
android sdk下载 所有的离线包都有 http://mirrors.neusoft.edu.cn/android/repository/
-
Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...
-
Xamarin.Android提示aapt退出,代码为255
Xamarin.Android提示aapt退出,代码为255 错误信息:”aapt.exe”已退出,代码为255.出现这种问题,通常是由于该项目所使用Android SDK不完整.通过SDK Mana ...
-
Html5中的跨页面消息传输
1.如果要接受从其他的窗口那里发过来的消息,就必须对窗口对象的message事件进行监控. window.addEventListener("message",function() ...
-
字符集设置为UTF-8
vi /etc/my.cnf [mysqld] character-set-server=utf8 [mysql] default-character-set=utf8 来自为知笔记(Wiz)
-
textarea内容太多, 鼠标点击全部显示
strRight+="<td bordercolor='#DEDEDE' width='500px' height='50'><div title='"+data ...
-
html 上传文件
1.html代码 <form id="form1" action="TestYield" method="post" enctype= ...
-
linux cpu load学习笔记
linux系统中的Load对当前CPU工作量的度量 Load Average 就是一段时间 (1 分钟.5分钟.15分钟) 内平均Load. [root@CNC-BJ-5-3N1 ~]# w 20:0 ...
-
Bootstrap 3.0的扁平化来了
Bootstrap 3 RC1 发布了,从官方上看,Bootstrap 3 似乎也开始趋于扁平化的风格设计. 网站UI和Button bootstrap 2.3.2以下的整体UI和图标是以box-sh ...