Net程序崩溃了怎么去查找定位问题

  • Net程序崩溃了怎么去查找定位问题已关闭评论
  • 202 次浏览
  • A+
所属分类:.NET技术
摘要

下载完成后,进入工具目录在目录中打开cmd命令行工具定位到当前目录
在命令行中输入procdump -e -ma -w Bcode_ConsoleApp.exe监控exe应用 这里也可以输入程序的PID

  1. 工具
    这里用到两个工具分别为Procdump+Windbg
    Procdump:ProcDump是一个命令行实用工具,主要目的是监视应用程序,以便在管理员或开发人员可用于确定峰值的原因期间监视 CPU 峰值和生成故障转储。 ProcDump 还包括使用窗口挂起 (使用相同的窗口挂起定义,Windows和任务管理器使用) 、未经处理的异常监视,并可以根据系统性能计数器的值生成转储。 它还可用作可在其他脚本中嵌入的常规进程转储实用工具。(最主要的是轻量、跨平台)微软介绍地址
    Windbg:Windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的另外一个用途是可以用来分析dump数据。
  2. 准备测试程序
    之所以这样写是为了让程序崩溃掉,利于我们抓取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);
    }
    } ]
  1. 抓取dump
    这里我们利用Procdump工具抓取进程崩溃时的dump,首先下载好Procdump工具

Net程序崩溃了怎么去查找定位问题

下载完成后,进入工具目录在目录中打开cmd命令行工具定位到当前目录
在命令行中输入procdump -e -ma -w Bcode_ConsoleApp.exe监控exe应用 这里也可以输入程序的PID
Net程序崩溃了怎么去查找定位问题

等待应用执行,下面运行我们的测试程序
Net程序崩溃了怎么去查找定位问题

接下来等程序崩溃
Net程序崩溃了怎么去查找定位问题

OK这里我们就完成了一大步,我们成功抓取到dump文件,dump文件就在Procdump工具目录下
Net程序崩溃了怎么去查找定位问题

  1. 解析dump查找问题原因
    这里我们利用微软的Windbg强大工具进行解析处理
    Net程序崩溃了怎么去查找定位问题

这里我们成功打开了dump文件并查找到4个线程
在【54b0】线程中我们看到一个错误,然后查看一下错误的具体信息
Net程序崩溃了怎么去查找定位问题

从错误信息中我们可以看到堆栈信息,找到堆栈信息对照我们的程序代码就可以定位并解决问题了