| 步骤 | 命令 / 操作 | 场景与目的 | 关键回显 / 判断标准 |
|---|---|---|---|
| 0 | windbg -z IT.Store.dll.31676.dmp |
打开 dump 文件 | 提示 User Mini Dump File with Full Memory 即 OK |
| 1 | .symfix + .reload |
自动设置微软公共符号服务器并拉取符号 | 末尾出现 Symbols downloaded successfully 无红字 |
| 2 | .sympath |
复查符号路径是否已指向 cache*;SRV*https://msdl.microsoft.com/download/symbols |
确认后续栈、CLR 数据不会缺符号 |
| 3 | !analyze -v |
自动初步诊断:异常代码、故障模块、Bucket-ID | 关键行 FAILURE_BUCKET_ID: CLR_EXCEPTION_80070002_IT.Store.dll!unknown_function |
| 4 | .exr -1 |
打印最后一条异常记录(OS 视角) | ExceptionCode: e0434352 (CLR exception) Parameter[0]: 80070002 即文件不存在 |
| 5 | .loadby sos clr |
加载与运行时同版本的 SOS,后续所有托管命令前提 | 无报错即成功;若多 CLR 版本需 .chain 确认 |
| 6 | !threads |
列出托管线程,确认哪几号线程是托管线程(ThreadOBJ 非 0) | 只有 0 号(崩溃线程)与 5 号(调试器辅助)是托管,其余为后台本地线程 |
| 7 | !pe |
查看当前托管线程正在抛出的 Exception 对象 | 得到地址 00000293842f3158 + 类型 FileNotFoundException |
| 8 | ~* e !clrstack |
一次性扫所有线程托管栈,快速锁定哪一线程用户代码正在跑 | 仅线程 0 有栈帧,但已崩坏(GetFrameContext failed: 1) |
| 9 | !dumpheap -type Exception -stat |
堆上异常对象统计,验证只存在 1 个 FileNotFoundException | 与 !pe 地址一致,排除其他异常干扰 |
| 10 | !DumpObj /d <Exception addr> → 取 _fileName 字段 |
看 CLR 到底想加载哪个程序集 | 字符串 = PresentationFramework, Version=6.0.2.0... |
| 11 | !DumpObj /d <_fusionLog addr> |
取 Fusion 绑定日志(若注册表开启则能看到完整路径) | 本例日志被关闭,仅提示 EnableLog=1;不影响后续证据 |
| 12 | lm |
最后一锤——列出加载模块 | 首行 IT_Store 映像路径为 ...\IT.Store.dll →进程基目录 = .dll 文件夹 |