Невозможно загрузить SOS в WinDbg

132

Предыстория: я новичок в WinDbg и пытаюсь запустить его в первый раз. Я хочу изучить дамп памяти, который я взял с работающего сайта ASP.NET 4, размещенного в IIS 7 на Windows Server 2008 (x86), и загрузил на свой локальный компьютер.

Я установил средства отладки и впервые запустил WinDbg, открыв аварийный дамп. Я пошел в Файл | Путь к файлу символов, задайте путь *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*и подождите, пока загрузятся все символы.

При попытке загрузить SOS столкнулся с проблемами. Сначала я попробовал следующую команду ...

.loadby sos mscorwks

... и получил ответ Unable to find module 'mscorwks'.

После поиска в Интернете я попытался загрузить mscorwks, выполнив следующую команду ...

sxe ld mscorwks.dll
g

... и получил ответ "Нет ошибки запускаемых отладчиков в 'g'"

Я скопировал SOS.dll (из C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) в каталог WinDbg, затем попытался ...

.load sos

... и получил ошибку ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Я не совсем уверен, что делать дальше. Я просто хочу загрузить SOS и покопаться в этом файле дампа. Любая помощь будет принята с благодарностью.

Fyi ... Я пытаюсь открыть файл дампа в 64-битной версии Windows 7 с 64-битной версией Windbg.

Кевин Бэбкок
источник

Ответы:

203

DLL среды выполнения CLR была переименована в clr.dll.NET 4. Итак, чтобы загрузить правильную версию SOS, вам необходимо настроить свою .loadbyкоманду. Т.е.

.loadby sos clr

Кроме того, если вы используете 64-разрядную версию, вам следует установить 32-разрядную версию инструментов отладки для Windows , чтобы отлаживать 32-разрядные приложения. Они устанавливаются бок о бок, поэтому нет проблем с установкой 32-битной и 64-битной версий на одном компьютере.

Я бы посоветовал не копировать SOS.dll. SOS должен соответствовать точной версии фреймворка, поэтому, пока вы загружаете его из каталога фреймворка с помощью .loadby, все готово.

Брайан Расмуссен
источник
Мне сложно установить и то, и другое в моей системе, поскольку последние установщики автоматически определяют тип процессора. Есть ли флаг переопределения, о котором вы знаете для msi? Я собираюсь установить старую 32-битную версию WinDbg, но не знаю, чего ожидать.
Дэйв
5
@Dave: Возможно, слишком поздно, но на веб-странице установки, найденной здесь: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx, вы можете выбрать установку распространяемых пакетов, которые помещают сюда MSI для каждой версии архитектуры : C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools for Windows
Аарон Лерх,
Если я скажу, .loadby sos clrчто получу Unable to find module 'clr'. Я пытаюсь отладить .NET 4 с помощью x64 WinDbg
Csaba Toth
2
@CsabaToth это дамп или живую отладку делаете? Если вы выполняете отладку в реальном времени, возможно, среда CLR еще не загружена. Вы можете сделать sxe ld clrостановку, когда CLR будет загружена, а затем вы можете загрузить SOS в этот момент.
Брайан Расмуссен
@BrianRasmussen Это скомпилированный исполняемый файл. Если я посмотрю на окно модулей, оно загружено.
Csaba Toth
18

Команда WinDbg "g" означает [Продолжить]

Поскольку вы открываете файл дампа, нет возможности «продолжить», он содержит только память процесса.

Таким образом, сообщение « Ошибка запускаемых отладчиков в 'g'» логично в вашем случае, поскольку процесс не запущен .

Для загрузки правильной версии SOS используйте следующую команду в зависимости от версии .NET.

.NET 4 и выше .loadот sos

.NET 3.5 и 2.loadот sos mscorwks

.NET 1.0 и 1.1 .load clr10 \ sos

HerbalMart
источник
1

Приведенные выше ответы нуждаются в улучшении, поскольку со временем стало легче обрабатывать sos-загрузку.

У ДЖОНА РОББИНСА есть хорошая статья об этом. Посмотрите, что серверы символов Microsoft настроены в пути к файлу символов, и запустите! Анализируйте -v в приглашении windbg, это поможет загрузить соответствующие файлы sos. Чтобы проверить, запустите .chain в командной строке, и вы увидите загруженную dll.

Киран Прабху
источник
0

Просто столкнулся с аналогичной проблемой при загрузке SOS и получал «указанный модуль не найден». Придумал другое решение, поэтому, если решения здесь вам не помогают, попробуйте следующее:

.loadby sos clr - указанный модуль не найден

Денис
источник