SOS.dll (расширение отладки SOS)

Внимание

В этой статье рассматривается платформа .NET Framework версия расширения отладки SOS. Дополнительные сведения о новой версии средства .NET (Core) см . в расширении отладки SOS.

Расширение отладки SOS (SOS.dll) помогает выполнять отладку управляемых программ в Visual Studio и в отладчике Windows (WinDbg.exe), предоставляя сведения о внутренней среде CLR. Для работы этой программы в проекте необходимо включить отладку неуправляемого кода. Библиотека SOS.dll автоматически устанавливается с .NET Framework. Для работы с библиотекой SOS.dll в Visual Studio установите Комплект разработки драйверов для Windows (WDK).

Синтаксис

![command] [options]

Команды

Команда Description
AnalyzeOOM (ao) Отображает сведения по последнему событию "Недостаточно памяти" (OOM), произошедшему при запросе на выделение памяти в куче для сборки мусора. (В сборке мусора сервера отображает произошедшее событие OOM для каждой кучи сборки мусора.)
BPMD [-nofuturemodule] [<имя метода имени<>> модуля] [-md<MethodDesc>] -list-clear< ожидающей точки останова число-clearall> Создает точку останова в указанном методе указанного модуля.

Если указанные модуль и метод не загружены, команда ожидает уведомления о загрузке модуля и выполнении JIT-компиляции, прежде чем создавать точку останова.

Списком ожидающих точек останова можно управлять с помощью параметров -list, -clear и -clearall.

Параметр -list создает список всех ожидающих точек останова. Если ожидающая точка останова имеет идентификатор модуля, отличный от нуля, эта точка останова связана с функцией в конкретном загруженном модуле. Если ожидающая точка останова имеет нулевой идентификатор модуля, такая точка останова применяется к еще не загруженным модулям.

Чтобы удалить из списка ожидающие точки останова, следует использовать параметр -clear или -clearall.
CLRStack [-a] [-l] [-p] [-n] Обеспечивает трассировку стека только для управляемого кода.

Параметр -p задает отображение аргументов управляемой функции.

Параметр -l задает отображение сведений о локальных переменных в кадре. Расширение отладки SOS не может получить локальные имена, поэтому выходные данные для локальных имен имеют значение> локального адреса><=формата.<

Параметр -a (все) заменяет собой комбинацию параметров -l и -p.

Параметр -n отключает отображение имен исходных файлов и номеров строк. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладки SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки. Такое поведение можно отключить, задав параметр -n (без номеров строк).

Расширение отладки SOS не отображает переходные кадры на платформах x64 и IA-64.
COMState Выдает список моделей контейнера COM для каждого потока и указатель Context, если он имеется.
DumpArray [-start startIndex<>] [длина длины<>] [-details] [-nofields] <адрес объекта массива>

–или–

DA [-start startIndex><] [длина длины<>] [-detail] [-nofields] адрес объекта массива>
Анализирует элементы объекта массива.

Параметр -start задает индекс, начиная с которого отображаются элементы.

Параметр -length задает количество отображаемых элементов.

Параметр -details задает отображение сведений об элементе в формате DumpObj и DumpVC.

Параметр -nofields отменяет отображение массивов. Этот параметр можно использовать, только если задан параметр -detail.
DumpAssembly<адрес сборки> Отображает сведения о сборке.

Команда DumpAssembly выводит список модулей, если они существуют.

Адрес сборки можно получить с помощью команды DumpDomain.
DumpClass<адрес EEClass> Отображает сведения о структуре EEClass, связанной с типом.

Команда DumpClass отображает значения статических полей, но значения нестатических полей не отображаются.

Используйте команду DumpMT, DumpObj, Name2EE или Token2EE, чтобы получить адрес структуры EEClass.
DumpDomain [<адрес> домена] Перечисляет все объекты Assembly, загруженные по указанному адресу объекта AppDomain. При вызове без параметров команда DumpDomain выводит список всех объектов AppDomain в составе процесса.
DumpHeap [-stat] [-strings] [-short] [-min size] [-max<<size>>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type partial type<name>] [start [end]] Отображает сведения о куче со сборкой мусора и статистику сбора мусора по объектам.

В случае чрезмерной фрагментации кучи сборщика мусора команда DumpHeap выдает соответствующее предупреждение.

Параметр -stat ограничивает выводимую информацию статистической сводкой по типам.

Параметр -strings ограничивает выводимую информацию статистической сводкой по значениям строк.

Параметр -short ограничивает вывод только адресом каждого объекта. Благодаря такому подходу можно легко передавать результат из одной команды отладчика в другую команду с целью автоматизации.

Параметр -min задает пропуск объектов, размер которых меньше значения параметра size, указанного в байтах (в шестнадцатеричном формате).

Параметр -max задает пропуск объектов, размер которых больше значения параметра size, указанного в байтах (в шестнадцатеричном формате).

Параметр -thinlock сообщает о блокировках ThinLock. Дополнительные сведения см. в описании команды SyncBlk.

Параметр -startAtLowerBound приводит к тому, что обход кучи начинается с нижней границы предоставленного диапазона адресов. На стадии планирования куча часто является неанализируемой, поскольку объекты перемещаются. Этот параметр заставляет DumpHeap начать проверку с указанной нижней границы. Чтобы задействовать этот параметр, необходимо указать адрес допустимого объекта в качестве нижней границы. Можно отобразить память по адресу неверного объекта, чтобы вручную найти следующую таблицу методов. Если сборка мусора выполняется в момент вызова memcopy, также можно найти адрес следующего объекта путем добавления размера к начальному адресу, который указан как параметр.

Параметр -mt задает вывод только тех объектов, которые соответствуют указанной структуре MethodTable.

Параметр -type задает вывод только тех объектов, имя типа которых содержит указанную строку.

Параметр start задает составление списка, начиная с указанного адреса.

Параметр end прекращает составление списка на указанном адресе.
Объект> DumpIL<Managed DynamicMethod | <Указатель> DynamicMethodDesc | <Указатель MethodDesc> Отображает общий промежуточный язык (CIL), связанный с управляемым методом.

Обратите внимание, что динамический CIL создается не так, как CIL, загруженный из сборки. Динамический CIL относится к объектам в массиве управляемых объектов, а не к маркерам метаданных.
DumpLog [-addr<addressOfStressLog>] [<Filename>] Записывает в указанный файл содержимое журнала нагрузок, хранящегося в памяти. Если имя не указано, команда создает файл "StressLog.txt" в текущем каталоге.

Хранящийся в памяти журнал нагрузок помогает при диагностике сбоев, вызываемых нагрузкой, без использования блокировки или ввода-вывода. Чтобы включить журнал стрессов, задайте следующие разделы реестра в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

С помощью необязательного параметра -addr можно указать журнал нагрузки, отличный от журнала по умолчанию.
DumpMD<адрес MethodDesc> Отображает сведения о структуре MethodDesc, находящейся по указанному адресу.

Чтобы получить адрес структуры MethodDesc из управляемой функции, можно использовать команду IP2MD.
DumpMT [-MD] <адрес MethodTable> Отображает сведения о таблице методов, расположенной по указанному адресу. Параметр -MD задает вывод списка всех методов, определенных вместе с объектом.

Каждый управляемый объект содержит указатель на таблицу методов.
Модуль DumpMethodSig sigaddr<><r> Отображает сведения о структуре MethodSig, находящейся по указанному адресу.
DumpModule [-mt] <адрес модуля> Отображает информацию о модуле, находящемся по указанному адресу. Параметр -mt задает отображение типов, определенных в модуле, и типов, на которые имеются ссылки в модуле

Чтобы получить адрес модуля, можно использовать команду DumpDomain или DumpAssembly.
DumpObj [-nofields] <адрес объекта>

–или–

DO<адрес объекта>
Отображает сведения об объекте, находящемся по указанному адресу. Команда DumpObj отображает список полей, сведения о структуре EEClass, таблицу методов и размер объекта.

Чтобы получить адрес объекта, можно использовать команду DumpStackObjects.

Следует иметь в виду, что команду DumpObj можно выполнять для полей типа CLASS, поскольку они также являются объектами.

Параметр -nofields не предотвращает отображение полей объекта, что удобно для таких объектов, как String.
DumpRuntimeTypes Отображает объекты типы среды выполнения в куче сборщика мусора и выводит список связанных с ними имен типов и таблиц методов.
DumpStack [-EE] [-n] [стек [bottomtopstack]] Отображает трассировку стека.

Параметр -EE команды DumpStack задает отображение только управляемых функций. Параметры top и bottom позволяют ограничить состав отображаемых кадров стека на платформах x86.

Параметр -n отключает отображение имен исходных файлов и номеров строк. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладки SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки. Такое поведение можно отключить, задав параметр -n (без номеров строк).

На платформах x86 и x64 команда DumpStack создает подробную трассировку стека.

На платформах IA-64 команда DumpStack действует аналогично команде отладчика K. На платформах IA-64 параметры top и bottom игнорируются.
DumpSig<sigaddr><moduleaddr> Отображает сведения о структуре Sig, находящейся по указанному адресу.
DumpSigElem<sigaddr><moduleaddr> Отображает единственный элемент объекта сигнатуры. В большинстве случаев следует использовать DumpSig для просмотра отдельных объектов сигнатур. Тем не менее, если сигнатура каким-либо образом повреждена, можно использовать DumpSigElem для чтения ее допустимых частей.
DumpStackObjects [-verify] [topstack [bottomstack]]

–или–

DSO [-verify] [topstack [bottomstack]]
Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека.

Параметр -verify задает проверку каждого нестатического поля CLASS в поле объекта.

Для определения значений локальных переменных и параметров используйте команду DumpStackObject вместе с командами трассировки стека, такими как K и CLRStack.
DumpVC<адрес MethodTable><адрес> Отображает сведения о полях класса значений, находящегося по указанному адресу.

Параметр MethodTable позволяет команде DumpVC правильно интерпретировать поля. В классах значений первое поле не содержит таблицу методов.
EEHeap [-gc] [-loader] Отображает сведения о памяти процессов, занимаемой внутренними структурами данных среды CLR.

Параметры -gc и -loader ограничивают выходные данные этой команды только сведениями о структурах данных сборщика мусора и загрузчика.

Сведения о сборщике мусора включает в себя диапазоны каждого сегмента в управляемой куче. Если указатель попадает в диапазон сегмента, заданный параметром -gc, значит, он является указателем объекта.
EEStack [-short] [-EE] Выполняет команду DumpStack для всех потоков в составе процесса.

Параметр -EE передается непосредственно в команду DumpStack. Параметр -short ограничивает выходные данные следующими видами потоков.

Потоки с блокировкой.

Потоки, остановленные для сбора мусора.

Потоки, которые в данный момент находятся в управляемом коде.
EEVersion Отображает версию среды CLR.
EHInfo [<адрес> MethodDesc] [<адрес> кода] Отображает блоки обработки исключений в указанном методе. Данная команда выводит адреса кода и смещения для блока предложений (блока try) и блока обработчика (блока catch).
Вопросы и ответы Отображает вопросы и ответы.
FinalizeQueue [-detail] | [-allReady] [-short] Отображает все объекты, зарегистрированные для заключительной обработки.

Параметр -detail задает вывод дополнительной информации обо всех блоках SyncBlocks, которые необходимо очистить, и оболочках RuntimeCallableWrappers, ожидающих очистки. Поток завершения кэширует и очищает обе эти структуры данных.

Параметр -allReady отображает все объекты, которые уже готовы к завершению без учета того, помечены они для сборки мусора или будут помечены следующей сборкой мусора. Объекты, отсутствующие в списке "готовые для завершения", — это завершаемые объекты, которые больше не являются корневым. Применение этого параметра может быть очень затратным, поскольку проверяется, все ли объекты в завершаемых очередях по-прежнему являются корневыми.

Параметр -short ограничивает вывод адресом каждого объекта. При использовании в сочетании с -allReady он перечисляет все объекты с методом завершения, которые больше не являются корневыми. При независимом использовании создает список всех объектов в очередях "поддерживающие завершение" и "готовые для завершения".
FindAppDomain<адрес объекта> Определяет домен приложения для объекта, находящегося по указанному адресу.
FindRoots-gen< N | >-gen any |<адрес объекта> Вызывает остановку отладчика в отлаживаемом объекте следующей коллекции заданного поколения. Эффект сбрасывается, как только произойдет останов. Чтобы остановиться на следующей коллекции, необходимо повторное выполнение команды. Форма <адреса> объекта этой команды используется после разрыва, вызванного произошло -gen или -gen. В этот момент отлаживаемый объект находится в правильном состоянии для FindRoots для идентификации корневых элементов для объектов из поколений, уничтожаемых в данный момент.
GCHandles [-perdomain] Отображает статистику дескрипторов сборщика мусора в составе процесса.

Параметр -perdomain упорядочивает статистику по доменам приложений.

Команда GCHandles служит для поиска утечек памяти, вызываемых утечками дескрипторов сборщика мусора. Например, утечка памяти происходит, когда в коде продолжает использоваться большой массив, поскольку на него еще указывает строгий дескриптор сборщика мусора, а сам дескриптор удаляется без освобождения памяти.
GCHandleLeaks Ищет в памяти ссылки на строгие и закрепленные дескрипторы сборщика мусора в рамках процесса и отображает результаты. При обнаружении дескриптора команда GCHandleLeaks отображает адрес ссылки. Если дескриптор в памяти не найден, выдается уведомление.
GCInfo<адрес MethodDesc><адрес в коде> Отображает данные, показывающие, содержатся ли управляемые объекты в регистрах или ячейках стека. Если производится сбор мусора, сборщик должен знать расположение ссылок на объекты, чтобы их можно было обновить новыми значениями указателей объектов.
GCRoot [-nostacks] <адрес объекта> Отображает информацию о ссылках (или корневых элементах) объекта, находящегося по указанному адресу.

Команда GCRoot анализирует всю управляемую кучу и таблицу дескрипторов в поисках дескрипторов, находящихся в других объектах или в стеке. Затем каждый стек просматривается в поисках указателей на объекты; также просматривается и очередь метода завершения.

Данная команда не определяет, является ли корень стека допустимым или удален ли он. Используйте команды CLRStack и U, чтобы дизассемблировать кадр, к которому принадлежит локальное значение или значение аргумента, и определить, используется ли еще корень стека.

Параметр -nostacks ограничивает поиск дескрипторами сборщика мусора и достижимыми объектами.
Адрес объекта GCWhere<> Отображает расположение и размер переданного аргумента в куче для сборки мусора. Если аргумент располагается в управляемой куче, но не является адресом допустимого объекта, размер отображается как "0" (нуль).
help [<command>] [faq] Отображает все доступные команды при отсутствии параметров или, если указана команда, — подробные справочные сведения об этой команде.

Параметр faq задает отображение ответов на часто задаваемые вопросы.
HeapStat [-inclUnrooted-iu | ] Отображает размеры поколений для каждой кучи и общий объем свободного места в каждом поколении каждой кучи. Если указан параметр -inclUnrooted, отчет содержит сведения об управляемых объектах в куче для сборки мусора, которая больше не является корневой.
HistClear Освобождает все ресурсы, используемые семейством команд Hist.

Как правило, прямой вызов HistClear не требуется, так как каждая команда HistInit очищает предыдущие ресурсы.
HistInit Инициализирует структуры SOS из журнала нагрузки, сохраненного в отлаживаемом объекте.
Obj_address HistObj<> Проверяет все записи журнала перемещения нагрузки и отображает цепочку перемещений сборки мусора, которые могли привести к адресу, переданному в качестве аргумента.
Obj_address HistObjFind<> Отображает все записи журнала, ссылающиеся на объект по указанному адресу.
Корень HistRoot<> Отображает сведения о повышениях и перемещениях указанного корневого элемента.

Корневое значение можно использовать для отслеживания движения объекта в сборках мусора.
IP2MD<адрес в коде> Отображает структуру MethodDesc по указанному адресу в коде после его JIT-компиляции.
ListNearObj (lno) <obj_address> Отображает объекты перед указанным адресом и после него. Команда находит в куче для сборки мусора адрес, напоминающий допустимое начало управляемого объекта (в зависимости от таблицы допустимых методов), и объект, следующий за адресом аргумента.
MinidumpMode [0] [1] Запрещает выполнение небезопасных команд при использовании минидампа.

Значение 0 отключает этот режим, а значение 1 включает его. По умолчанию значение MinidumpMode равно 0.

Минидампы, созданные с помощью команды .dump /m или .dump, содержат ограниченный набор данных, связанных с CLR, и позволяют корректно выполнять лишь часть команд SOS. Выполнение некоторых команд может завершаться сбоем из-за непредвиденных ошибок, вызываемых тем, что требуемые области памяти не сопоставлены или сопоставлены лишь частично. Данный параметр блокирует запуск небезопасных команд для минидампов.
Name2EE<имя модуля><имя типа или метода>

–или–

Name2EE<имя модуля>!<имя типа или метода>
Отображает структуры MethodTable и EEClass для указанного типа или метода в указанном модуле.

Указанный модуль должен быть загружен в процесс.

Чтобы получить правильное имя типа, просмотрите модуль с помощью Ildasm.exe (дизассемблера IL). Можно также передать * в качестве параметра имени модуля, чтобы просматривались все загруженные управляемые модули. Параметр имя модуля может также содержать имя отладчика для модуля, например mscorlib или image00400000.

Эта команда поддерживает синтаксис <<>module>!typeотладчика Windows. Имя типа должно быть полным.
ObjSize [<адрес> объекта] | [-агрегат] [-stat] Отображает размер указанного объекта. Если параметры не указаны, команда ObjSize отображает размеры всех объектов, найденных в управляемых потоках, все дескрипторы сборщика мусора в данном процессе, а также общий размер всех объектов, указываемых этими дескрипторами. Команда ObjSize включает в размер каждого родительского объекта размер всех его дочерних объектов.

Параметр -aggregate можно использовать в сочетании с аргументом -stat, чтобы получить подробное представление типов, которые по-прежнему являются корневыми. С помощью !dumpheap -stat и !objsize -aggregate -stat можно определить, какие объекты больше не являются корневыми, и провести диагностику различных проблем с памятью.
PrintException [-nested] [-lines] [<адрес> объекта исключения]

–или–

PE [вложенный] [<адрес> объекта исключения]
Отображает и форматирует поля всех производных объектов класса Exception, находящегося по указанному адресу. Если адрес не задан, команда PrintException отображает последнее исключение, возникшее в текущем потоке.

Параметр -nested задает отображение сведений о вложенных объектах исключений.

Если доступен, параметр -lines отображает сведения об источнике.

С помощью этой команды можно форматировать и просматривать поле _stackTrace, представляющее собой двоичный массив.
ProcInfo [-env] [-time] [-mem] Отображает переменные среды для статистики процесса, процессорного времени ядра и использования памяти.
RCWCleanupList<адрес RCWCleanupList> Отображает список вызываемых оболочек среды выполнения по указанному адресу, ожидающих очистки.
SaveModule<базовый адрес><имя_файла> Записывает в указанный файл образ, загруженный в память по указанному адресу.
SOSFlush Очищает внутренний кэш SOS.
StopOnException [-производный] [-create-create2 | ] <Номер псевдорегистрирования исключений><> Предписывает отладчику остановиться при возникновении указанного исключения и продолжать работу при возникновении других исключений.

Параметр -derived задает перехват указанного исключения и всех производных от него исключений.
SyncBlk [-all | <номер syncblk>] Отображает указанную структуру SyncBlock или все структуры SyncBlock. При отсутствии аргументов команда SyncBlk отображает структуру SyncBlock, соответствующую объектам, владельцем которых является поток.

Структура SyncBlock представляет собой контейнер для дополнительной информации, которую необязательно создавать для каждого объекта. Она может включать данные COM-взаимодействия и сведения о блокировке для потокобезопасных операций.
ThreadPool Отображает сведения о пуле управляемых потоков, включая число рабочих запросов в очереди, число потоков портов завершения и число таймеров.
Token2EE<имя модуля><токен> Преобразует указанный токен метаданных указанного модуля в структуру MethodTable или MethodDesc.

В качестве параметра имени модуля можно указать *, чтобы узнать, с чем сопоставляется токен в каждом из загруженных управляемых модулей. Можно также задать имя отладчика для модуля, например mscorlib или image00400000.
Threads [-live] [-special] Отображает все управляемые потоки в процессе.

Команда Threads отображает сокращенный идентификатор отладчика, идентификатор потока среды CLR и идентификатор потока операционной системы. Кроме того, команда Threads отображает столбец Domain, содержащий домен приложения, в котором выполняется поток, столбец APT, в котором показан режим COM-контейнера, и столбец Exception, где указано последнее исключение, возникшее в потоке.

Параметр -live задает отображение потоков, связанных с активным потоком.

Параметр -special задает отображение всех специальных потоков, созданных средой CLR. К специальным потокам относятся потоки сборки мусора (для параллельной сборки мусора и серверной сборки мусора), вспомогательные потоки отладчика, потоки метода завершения, потоки выгрузки AppDomain и потоки таймера пула потоков.
ThreadState <значение поля состояния> Отображает состояние потока. Параметр value представляет собой значение поля State в выводе отчета Потоки.

Пример:

0:003> !Threads ThreadCount: 2 UnstartedThread: 0 BackgroundThread: 1 PendingThread: 0 DeadThread: 0 Hosted Runtime: no PreEmptive GC Alloc Lock ID OSID ThreadOBJ State GC Context Domain Count APT Exception 0 1 250 0019b068 a020 Disabled 02349668:02349fe8 0015def0 0 MTA 2 2 944 001a6020 b220 Enabled 00000000:00000000 0015def0 0 MTA (Finalizer) 0:003> !ThreadState b220 Legal to Join Background CLR Owns CoInitialized In Multi Threaded Apartment
TraverseHeap [-xml] <имя_файла> Записывает данные кучи в указанный файл в формате, распознаваемом профилировщиком CLR. Параметр -xml предписывает команде TraverseHeap преобразовать файл в формат XML.
U [-gcinfo] [-ehinfo] [-n]< MethodDesc address> | <Адрес кода> Отображает дизассемблированный код с примечаниями для управляемого метода, заданного указателем структуры MethodDesc или адресом кода в теле метода. Команда U отображает весь метод от начала до конца, с примечаниями, преобразующими токены метаданных в имена.

Параметр -gcinfo предписывает команде U отобразить структуру GCInfo метода.

Параметр -ehinfo задает отображение сведений об исключениях в методе. Эту информацию можно также получить с помощью команды EHInfo.

Параметр -n отключает отображение имен исходных файлов и номеров строк. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладчика SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки. Чтобы отключить это поведение, можно указать параметр -n.
VerifyHeap Проверяет кучу сборщика мусора на наличие признаков повреждения и отображает обнаруженные ошибки.

Повреждения кучи могут быть вызваны неправильно созданными вызовами неуправляемого кода.
VerifyObj<адрес объекта> Проверяет объект, передаваемый в качестве аргумента, на наличие повреждений.
VMMap Выполняет обход виртуального адресного пространства и отображает тип защиты для каждого региона.
VMStat Создает сводное представление виртуального адресного пространства, упорядоченное по типам защиты соответствующих видов памяти (свободная, зарезервированная, выделенная, закрытая, отображаемая, образ). В столбце "TOTAL" содержится результат умножения значения в столбце "AVERAGE" на значение в столбце "BLK COUNT".

Замечания

Расширение отладки SOS позволяет просматривать сведения о коде, выполняемом в среде CLR. Например, с помощью расширения отладки SOS можно получать сведения об управляемой куче, искать повреждения кучи, отображать внутренние типы данных, используемые средой выполнения, и просматривать информацию о любом управляемом коде, запущенном в среде выполнения.

Для работы с расширением отладчика SOS в Visual Studio установите Комплект разработки драйверов для Windows (WDK). Дополнительные сведения об интегрированной среде отладки в Visual Studio см. в статье Debugging Environments (Среды отладки).

Расширение отладки SOS можно также загрузить в отладчик WinDbg.exe и выполнять команды в этом отладчике.

Чтобы загрузить расширение отладки SOS в отладчик WinDbg.exe, выполните в программе следующую команду.

.loadby sos clr

Отладчик WinDbg.exe и Visual Studio используют версию библиотеки "SOS.dll", которая соответствует текущей версии "Mscorwks.dll". По умолчанию следует использовать версию библиотеки "SOS.dll", которая соответствует текущей версии "Mscorwks.dll".

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

Чтобы загрузить определенную версию библиотеки "SOS.dll", введите в окне отладчика Windows следующую команду.

.load <full path to sos.dll>

Примеры

Следующая команда отображает содержимое массива по адресу 00ad28d0. Отображаются данные для пяти элементов массива, начиная со второго.

!dumparray -start 2 -length 5 -detail 00ad28d0

Следующая команда отображает содержимое сборки по адресу 1ca248.

!dumpassembly 1ca248

Следующая команда отображает сведения о куче сборщика мусора.

!dumpheap

Следующая команда записывает содержимое журнала нагрузок в памяти в файл "StressLog.txt" (по умолчанию), расположенный в текущем каталоге.

!DumpLog

Следующая команда отображает структуру MethodDesc по адресу 902f40.

!dumpmd 902f40

Следующая команда отображает сведения о модуле по адресу 1caa50.

!dumpmodule 1caa50

Следующая команда отображает сведения об объекте по адресу a79d40.

!DumpObj a79d40

Следующая команда отображает поля класса значений по адресу 00a79d9c, используя таблицу методов по адресу 0090320c.

!DumpVC 0090320c 00a79d9c

Следующая команда отображает память процесса, используемую сборщиком мусора.

!eeheap -gc

Следующая команда отображает все объекты, запланированные для заключительной обработки.

!finalizequeue

Следующая команда находит домен приложения для объекта по адресу 00a79d98.

!findappdomain 00a79d98

Следующая команда отображает все дескрипторы сборщика мусора в текущем процессе.

!gcinfo 5b68dbb8

Следующая команда отображает структуры MethodTable и EEClass для метода Main класса MainClass в модуле unittest.exe.

!name2ee unittest.exe MainClass.Main

Следующая команда отображает сведения о токене метаданных по адресу 02000003 в модуле unittest.exe.

!token2ee unittest.exe 02000003

См. также