Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Как при наличии отладочных символов только своей dll получить её переменные из дампа памяти приложения?

#visual_studio #dll #отладка #dump


Есть моя DLL библиотека (проект Visual Studio 2013). Ее используют чужие программы.
Во время работы этих программ было сохранено несколько полных дампов память процессов
этих программ.
Я открываю эти дампы в моем Visual Studio проекте. Отладочные символы я имею только
для моей DLL. При этом, если во время сохранения дампа исполнялся код одной из функций
моей DLL, то видно все символы в исходном коде, место текущего исполнения итд. Но если,
исполнялся другой код, я никаких данных не вижу и посмотреть текущее значение переменных
моей DLL не могу. Локальные переменные ясное дело недоступны, так как их нет, но и
статические данные тоже не видны.  

Как просматривать данные моей DLL?
    


Ответы

Ответ 1



Не уверен, можно ли это сделать через студию. Но точно можно через 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.

Комментариев нет:

Отправить комментарий