Получите правильные символы.net для Windbg
Я делаю некоторую отладку аварийного дампа, где я ищу дамп, взятый с рабочего сервера. На машине, на которой я запускаю WinDbg, должна быть установлена немного другая версия среды выполнения.NET - я получаю ошибки при загрузке собственных образов системных сборок.NET (поэтому не могу загрузить, например, System.Data.Linq
).
Каков наилучший способ обеспечить доступ ко всем машинам отладки ко всем нужным символам?
Редактировать Добавлен вывод 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
3 ответа
ni
в названии видно, что это нативная версия (оптимизированная по ngen), которая отличается от машины к машине. Вы должны создать PDB на машине, где вы получили dmp с помощью ngen:
ngen createpdb C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Data.Linq\
f989891b3a507d4aaec44ab1df12e9d5\System.Data.Linq.ni.dll c:\symbols /debug
Теперь добавьте PDB из символов C:\ в путь символов Windbgs.
Вы можете заставить WINDBG загрузить официальные символы с серверов Microsoft, выполнив следующую команду:
.sympath srv*c:\symbols*http://msdl.microsoft.com/download/symbols
.reload /f
Это будет хранить символы, загруженные с сервера, в локальном кэше по адресу C:\Symbols
и затем принудительно перезагрузите символы для всех загруженных в данный момент модулей.
Есть некоторые вещи, которые следует учитывать для.NET:
- Убедитесь, что у вас есть хороший дамп для.NET, т.е. 64-битный дамп 64-битного процесса или 32-битный дамп 32-битного процесса. Если
lm m wow64
показывает модуль, это не "хороший" дамп. - Установите символы, по крайней мере
.symfix c:\symbols
а также.reload
Получите файлы отладки.NET (SOS.dll и mscordacwks.dll) с исходного ПК и переименуйте их соответствующим образом. Подробности смотрите в другом ответе.
Мой бесплатный инструмент Mscordacwks Collector сделает это за вас, включая переименование.
Если этот компьютер больше не доступен, вы можете поискать эти файлы в моем архиве mscordacwks и SOS.
Отказ от ответственности: я их автор, если это не было достаточно ясно.