DebugDiag分析dump报错解决方案

报错

当生产机器IIS出现cpu或者内存故障的时候,我们可以在任务管理器中将w3wp.exe右键转储成dump文件,然后使用dump分析工具进行分析。常用的dump分析工具有debugDiag和windbg,当我们在使用debugdiag诊断工具进行dump分析的时候,可能会遇到报错“Failed to load dac: c:\symbols\mscordacwks_Amd64_Amd64_***.dll”。这将导致我们不能正确进行dump分析,在Performance Summary中会出现”kernal32!BaseThreadInitThunk+13”、”ntdll!RtlUserThreadStart+21”、”clr!PreBindAssemblyEx+9dbf”等错误。
出现这个问题的原因在于mscordacwks.dll与生产机器dump时候的版本不一致。

解决

1、打开本机文件目录C:\Windows\Microsoft.NET\Framework64\v4.0.30319,不同的.net framework,对应的版本号不同,找到mscordacwks.dll文件。
2、将上述文件拷贝到指定目录中,可以是任意目录。我这里拷贝到了C:\mysymbols目录中,并将该文件重命名为报错的dll版本号,例如mscordacwks_Amd64_Amd64_4.7.3468.00.dll或者mscordacwks_Amd64_Amd64_4.7.3163.00.dll
3、打开DebugDiag Analysis,点击左上角的设置按钮,在”Symbol search paths to use for Analysis”选项中,添加上一步中的路径(C:\mysymbols),并将”_NT_SYMBOL_PATH”和”Microsoft Public Symbol Servers”的√取消选择。
4、返回,Start Analysis开始分析。