为Windbg获取正确的.net原生符号
本文关键字:net 原生 符号 Windbg 获取 | 更新日期: 2023-09-27 18:11:11
我正在做一些崩溃转储调试,我正在查看从生产服务器获取的转储。我运行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
名称中的ni
表明这是本机版本(ngen优化),因机器而异。您必须在使用ngen:
ngen createpdb C:'Windows'assembly'NativeImages_v4.0.30319_32'System.Data.Linq'
f989891b3a507d4aaec44ab1df12e9d5'System.Data.Linq.ni.dll c:'symbols /debug
现在将C:'symbols中的PDBs添加到Windbgs符号路径中。
您可以通过以下命令让WINDBG从Microsoft服务器下载官方符号:
.sympath srv*c:'symbols*http://msdl.microsoft.com/download/symbols
.reload /f
这将把从服务器下载的符号存储在C:'Symbols
的本地缓存中,然后强制重新加载所有当前加载的模块的符号。
对于。net有一些事情需要考虑:
- 确保你有一个良好的。net转储,即64位进程的64位转储或32位进程的32位转储。如果
- 设置符号,至少
.symfix c:'symbols
和.reload
从原PC获取. net调试文件(SOS.dll和mscordacwks.dll)并相应地重命名。详见另一个答案
我的免费工具Mscordacwks Collector会为你做这些,包括重命名。
如果那台电脑不再可用,你可能需要在我的mscordacwks和SOS存档中搜索这些文件
免责声明:我是这些的作者,如果这还不够清楚的话。
lm m wow64
显示一个模块,它不是一个"好的"转储。