Не удалось загрузить SOS в WinDbg

Предыстория: я новичок в 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 и копаться в этом файле дампа. Любая помощь будет принята с благодарностью.

Кстати, я пытаюсь открыть файл дампа в 64-разрядной версии Windows 7 с 64-разрядной версией Windbg.

Ответ 1

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

.loadby sos clr

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

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

Ответ 2

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

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

Таким образом, сообщение "No runnable debuggees error in" g "логично в вашем случае, так как процесс не запущен.

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

.NET 4 и выше.loadby sos

.NET 3.5 и .loadby sos mscorwks

.NET 1.0 и 1.1 .load clr10\sos

Ответ 3

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

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

Ответ 4

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

JOHN ROBBINS имеет приятный статью вокруг него, см., что серверы символов Microsoft настроены в пути файла символов и запускаются! анализировать -v на windbg подскажите, это сделает трюк, он будет загружать соответствующие файлы sos. Чтобы проверить запуск .chain в приглашении, вы увидите загруженную dll.