WinDbg является отладчиком режима пользователя и ядра, но сам по себе он не совсем понимает управляемый код, и поэтому команда !analyze
имеет ограниченное использование. Если вы хотите отлаживать управляемые приложения с помощью WinDbg, вам нужен какой-то способ, чтобы WinDbg понимал внутреннюю структуру управляемого кода. Есть ряд расширенных DLL, которые позволяют это. .NET Framework поставляется с sos.dll, и есть такие загрузки, как psscor2.dll и sosex.dll .
SOS и PSSCOR2 предоставляют более или менее одинаковые функции, в то время как SOSEX добавляет новые функции для управляемой отладки. Файлы справки для каждого из них доступны в WinDbg. Например. чтобы получить справку по SOS, вы можете использовать команду !sos.help
.
Вы должны загрузить SOS или PSSCOR2 и, возможно, SOSEX для отладки управляемого приложения с WinDbg. Например. если вы хотите загрузить SOS, вы используете команду загрузки, подобную этой
.loadby sos clr
Это загрузит SOS из местоположения среды выполнения .NET. Обратите внимание, что среда выполнения называется mscorwks
в .NET 2 и coreclr
в Silverlight, поэтому, если вы используете любой из них, вам необходимо соответствующим образом изменить команду .loadby
.
WinDbg нужны символы для отображения дополнительной информации. Это особенно важно для неуправляемого кода. Вы можете использовать команду .symfix
, чтобы WinDbg мог получать символы по мере необходимости с сервера символов Microsoft.
Поскольку ваше приложение зависает, есть большая вероятность, что у вас будет один или несколько заблокированных потоков. Вы можете просматривать управляемые потоки, используя команду !threads
(или просто !t
). В .NET простые блокировки реализуются внутренне с помощью структуры, называемой SyncBlocks. Вы можете просмотреть их с помощью команды !syncblk
. Если вы загрузили SOSEX, команда !dlk
может автоматически обнаруживать взаимоблокировки.
Если вам нужна дополнительная информация, прочитайте пару книг и несколько блогов.
Книга:
Блоги
- Блог Тесс отлично. Он имеет множество учебных пособий и лабораторий, которые вы можете использовать на практике.
- Блог Тома также очень полезен.
Видео:
- Я сделал презентацию по управляемой отладке в центре разработки Microsoft в Дании. Видео доступно на канале р. Часть 1 и Часть 2 .