- A+
所属分类:.NET技术
- 工具
这里用到两个工具分别为Procdump+Windbg
Procdump:ProcDump是一个命令行实用工具,主要目的是监视应用程序,以便在管理员或开发人员可用于确定峰值的原因期间监视 CPU 峰值和生成故障转储。 ProcDump 还包括使用窗口挂起 (使用相同的窗口挂起定义,Windows和任务管理器使用) 、未经处理的异常监视,并可以根据系统性能计数器的值生成转储。 它还可用作可在其他脚本中嵌入的常规进程转储实用工具。(最主要的是轻量、跨平台)微软介绍地址
Windbg:Windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的另外一个用途是可以用来分析dump数据。 - 准备测试程序
之所以这样写是为了让程序崩溃掉,利于我们抓取Dump文件
- [class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var jj = Console.ReadLine();
Console.WriteLine(jj);
new TestMain().main();
Console.ReadLine();
}
}
class TestMain {
public void main() {
Timer timer = new Timer(new TimerCallback(m =>
{
var r = 10 / Convert.ToInt32("0");
}), null, 60000, 5000);
}
} ]
- 抓取dump
这里我们利用Procdump工具抓取进程崩溃时的dump,首先下载好Procdump工具。
下载完成后,进入工具目录在目录中打开cmd命令行工具定位到当前目录
在命令行中输入procdump -e -ma -w Bcode_ConsoleApp.exe监控exe应用 这里也可以输入程序的PID
等待应用执行,下面运行我们的测试程序
接下来等程序崩溃
OK这里我们就完成了一大步,我们成功抓取到dump文件,dump文件就在Procdump工具目录下
- 解析dump查找问题原因
这里我们利用微软的Windbg强大工具进行解析处理
这里我们成功打开了dump文件并查找到4个线程
在【54b0】线程中我们看到一个错误,然后查看一下错误的具体信息
从错误信息中我们可以看到堆栈信息,找到堆栈信息对照我们的程序代码就可以定位并解决问题了