由于作者水平有限,如有写得不对的地方,请指正。
使用WinDbg的过程中,坑特别的多,对版本要求比较严格,如:
1 32位应用程序导出的Dump文件要用32位的WinDbg打开,想要没有那么多的问题,还得要求用32位的任务管理器导出Dump文件,32位的任务管理器的路径如下:C:\Windows\SysWOW64\taskmgr.exe
2 64位应用程序导出的Dump文件要用64位的WinDbg打开
3  没指定位数的程序(如AnyCPU)导出的文件要用64位的WinDbg打开
  
本文目的,就是查看导出的dump文件中堆栈中的方法参数值,这样方便后续分析问题
本文测试环境:
.net framework 3.5
vistual studio 2017
win10 64位操作系统
步骤如下:
1   新增C# .net framework 控制台程序,选择.net framework 3.5 ,项目名称为:WindbgDemo,并编写代码如下:
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace WindbgDemo
{
    class Program
    {
        private static string _csdnUrl = "https://www.csdn.net/";
        public static string BaiDuUrl = "https://www.baidu.com/";
        static void Main(string[] args)
        {
          
            ThreadPool.QueueUserWorkItem((a) => {
                new DownLoadBp().DownLoadOperation(BaiDuUrl);
            });
            //堵塞主线程
            string readRet=Console.ReadLine();
            Console.WriteLine("主线程读取到的结果:" + readRet);
            Console.ReadKey(true);
        }
    }
    public class DownLoadBp
    {
        public void DownLoadOperation(string url)
        {
            Console.WriteLine("子线程:url地址:"+url);
            string readRet = Console.ReadLine();
            //堵塞子线程
            Console.ReadKey(true);
            Console.WriteLine("子线程读取到的结果:" + readRet);
        }
        
    }
} 
2 获取dump文件,参考前面的博文
3 利用!threads查看线程

4 利用~~[4d24]s切换到4d24线程

5 利用!clrstack -p 获取到详细的堆栈及地址信息
 可以看到方法WindbgDemo.DownLoadBp.DownLoadOperation中的参数名称为url,对应的值的地址为:0x0000000003222bd8
6 利用 !do 地址值 查看 地址0x0000000003222bd8对应的值,如:
!do 0000000003222bd8

可以看到字符串的值为:https://www.baidu.com/
刚好与前面C#程序中的代码对应上:




















