Есть моя DLL библиотека (проект Visual Studio 2013). Ее используют чужие программы. Во время работы этих программ было сохранено несколько полных дампов память процессов этих программ.
Я открываю эти дампы в моем Visual Studio проекте. Отладочные символы я имею только для моей DLL. При этом, если во время сохранения дампа исполнялся код одной из функций моей DLL, то видно все символы в исходном коде, место текущего исполнения итд. Но если, исполнялся другой код, я никаких данных не вижу и посмотреть текущее значение переменных моей DLL не могу. Локальные переменные ясное дело недоступны, так как их нет, но и статические данные тоже не видны.
Как просматривать данные моей DLL?
Ответ
Не уверен, можно ли это сделать через студию. Но точно можно через WinDBG:
Открыть дамп.
Включить ссылки в выводе:
.prefer_dml 1
Прописать путь к символам:
.sympath+ srv*
Загрузить SOS (пусть исправить на соответствующий версии и платформе)
для 4.0:
.loadby sos clr
для <4.0
.loadby sos mscorwks
или по полному пути
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll
Найти EEClass для того типа, для которого хочется посмотреть статические поля
> !name2ee mscorlib.dll System.Console
Module: 0000064278854000 (mscorlib.dll)
Token: 0x000000000200008b
MethodTable: 00000642788c8d10
EEClass: 0000064278a271a8
Name: System.Console
Посмотреть статические поля:
> !dumpclass 0000064278a271a8
Class Name: System.Console
mdToken: 000000000200008b (C:\WINDOWS\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Parent Class: 00000642788c0c30
Module: 0000064278854000
Method Table: 00000642788c8d10
Vtable Slots: 4
Total Method Slots: 78
Class Attributes: 100181 Abstract,
NumInstanceFields: 0
NumStaticFields: d
MT Field Offset Type VT Attr Value Name
00000642788f5aa0 40002ae d8 System.IO.TextReader 0 shared static _in
Дальше перемещаться кликами по адресам объектов - в режиме DML по клику будет выполнятся соответствующая команда для дампа объекта.
По настройке WinDBG есть отличный мануал Debugging Managed Code Using the Windows Debugger.
Комментариев нет:
Отправить комментарий