我正在进行一些故障转储调试,我正在寻找从生产服务器获取的转储。我正在运行WinDbg的机器必须安装一个稍微不同的.NET运行时版本 - 我在加载.NET系统程序集的本机映像时遇到错误(因此无法加载例如System.Data.Linq
) 。
确保我的调试机器可以访问所有正确符号的最佳方法是什么?
修改 为Thomas Weller添加了lmv的输出
000007fb`68660000 000007fb`68993000 System_Data_Linq_ni C (pdb symbols) C:\Program Files\Debugging Tools for Windows (x64)\sym\System.Data.Linq.pdb\703A918D116A4558BB44245924371ACD1\System.Data.Linq.pdb
Loaded symbol image file: System.Data.Linq.ni.dll
Image path: C:\Windows\assembly\NativeImages_v4.0.30319_64\System.Data.Linq\acbd568cd3c2499fbb7b2639c4a46a81\System.Data.Linq.ni.dll
Image name: System.Data.Linq.ni.dll
Has CLR image header, track-debug-data flag not set
Timestamp: Fri Apr 11 20:41:26 2014 (534899C6)
CheckSum: 00000000
ImageSize: 00333000
File version: 4.0.30319.34209
Product version: 4.0.30319.34209
File flags: 0 (Mask 3F)
File OS: 4 Unknown Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
答案 0 :(得分:7)
名称中的ni
表示这是本机版本(ngen优化),因机器而异。您必须在使用ngen获取dmp的计算机上创建PDB:
ngen createpdb C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Data.Linq\
f989891b3a507d4aaec44ab1df12e9d5\System.Data.Linq.ni.dll c:\symbols /debug
现在将PDB从C:\ symbols添加到Windbgs符号路径。
答案 1 :(得分:2)
您可以通过运行以下命令让WINDBG从Microsoft服务器下载官方符号:
.sympath srv*c:\symbols*http://msdl.microsoft.com/download/symbols
.reload /f
这会将从服务器下载的符号存储在C:\Symbols
的本地缓存中,然后强制重新加载所有当前加载的模块的符号。
答案 2 :(得分:2)
.NET需要考虑一些事项:
lm m wow64
显示模块,那么它不是"好的"转储。.symfix c:\symbols
和.reload
从原始PC获取.NET调试文件(SOS.dll和mscordacwks.dll)并相应地重命名。请参阅details in another answer。
我的免费软件工具Mscordacwks Collector将为您执行此操作,包括重命名。
如果该PC不再可用,您可能希望在我的mscordacwks and SOS archive
中搜索这些文件免责声明:我是这些作者的作者,如果这还不够清楚。