Поделиться через


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

Расширение отладки SOS (SOS.dll) помогает отлаживать управляемые программы в отладчике WinDbg.exe и в Visual Studio, предоставляя информацию о внутренней общеязыковой среде выполнения (CLR). Это средство требует, чтобы в проекте была включена неуправляемая отладка. Можно также использовать расширение отладки SOS с отладчиком Windows (WinDbg.exe).

Это средство устанавливается автоматически с Visual Studio и пакетом SDK Windows. Чтобы запустить инструмент, мы рекомендуем использовать командную строку Visual Studio или командную строку пакета Windows SDK (командную оболочку). Эти служебные программы позволяют легко работать с инструментом, не переходя к папке установки. Дополнительные сведения см. в разделе Командная строка Visual Studio и пакета Windows SDK.

  • Если на компьютере установлена среда Visual Studio: на панели задач последовательно щелкните Start, All Programs, Visual Studio, Visual Studio Tools и Visual Studio Command Prompt.

    – или –

    Если на компьютере установлен пакет Windows SDK: на панели задач щелкните Start, выберите All Programs и откройте папку с пакетом Windows SDK, затем щелкните Command Prompt (или CMD Shell).

  • В командной строке введите следующее:

![command] [options] 

Команды

Command

Описание

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 (all) заменяет собой комбинацию параметров и -l и -p.

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

Расширение отладки SOS не отображает кадры переходов на платформах x64 и IA-64.

COMState

Выдает список моделей подразделений COM для каждого потока и указатель Context, если он имеется.

DumpArray [-start <начальный_индекс>] [-length <длина>] [-details] [-nofields] <адрес_объекта_массива>

– или –

DA [-start <начальный_индекс>] [-length <длина>] [-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 <размер>] [-max <размер>] [-thinlock] [-startAtLowerBound] [-mt <адрес_MethodTable>] [-type <частичное_имя_типа>][начало [конец]]

Отображает информацию о куче сборщика мусора и статистику сбора мусора по объектам.

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

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

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

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

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

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

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

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

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

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

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

  • Параметр end прекращает составление списка на указанном адресе.

DumpIL <управляемый_объект_DynamicMethod> | <указатель_DynamicMethodDesc> | <указатель_MethodDesc>

Отображает код MSIL, связанный с управляемым методом.

Следует иметь в виду, что динамический язык MSIL генерируется иначе, чем язык MSIL, загруженный из сборки. Динамический язык MSIL относится к объектам внутри управляемого объекта-массива, а не к токенам метаданных.

DumpLog-addr < addressOfStressLog>] [<e имя_файла >]

Записывает в указанный файл содержимое журнала нагрузок, хранящегося в памяти. Если имя не указано, команда создает файл 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 <подпись_метода> <адрес_модуляr>

Отображает информацию о структуре MethodSig, находящейся по указанному адресу.

DumpModule [-mt] <адрес_модуля>

Отображает информацию о модуле, находящемся по указанному адресу. Параметр -mt задает вывод типов, определенных в модуле, и типов, на которые имеются ссылки в модуле.

Для получения адреса модуля можно использовать команду DumpDomain или DumpAssembly.

DumpObj [-nofields] <адрес_объекта>

– или –

DO <адрес_объекта>

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

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

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

Параметр -nofields не позволяет отображаться полям объекта, что полезно для таких объектов, как String.

DumpRuntimeTypes

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

DumpStack [-EE] [-n] [top стек [bottom stack]]

Отображает трассу стека.

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

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

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

На платформах IA-64 команда DumpStack действует аналогично команде отладчика K. На платформах IA-64 параметры top и bottom игнорируются.

DumpSig <адрес_подписи> <адрес_модуля>

Отображает информацию о структуре Sig, находящейся по указанному адресу.

DumpSigElem <адрес_подписи> <адрес_модуля>

Отображает единственный объекта сигнатуры. В большинстве случаев следует использовать DumpSig для просмотра отдельных объектов сигнатур. Тем не менее, если сигнатура каким-то образом повреждена, можно использовать DumpSigElem для чтения ее допустимых частей.

DumpStackObjects [-verify] [top стек [bottom стек]]

– или –

DSO [-verify] [top стек [bottom стек]]

Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека.

Параметр -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).

FAQ

Отображает вопросы и ответы.

FinalizeQueue [-detail] | [-allReady] [-short]

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

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

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

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

FindAppDomain <адрес_объекта>

Определяет домен приложения для объекта, находящегося по указанному адресу.

FindRoots -gen <N> | -gen any |<адрес_объекта>

Вызывает остановку отладчика в отлаживаемом объекте следующей коллекции заданного поколения. Эффект сбрасывается, как только произойдет останов. Чтобы остановиться на следующей коллекции, необходимо повторное выполнение команды. Форма <адрес_объекта> этой команды используется после возникновения прерывания, вызванного -gen или -gen any. В этот момент отлаживаемый процесс находится в правильном состоянии для FindRoots для идентификации корневых папок для объектов из поколений, уничтожаемых в данный момент.

GCHandles [-perdomain]

Отображает статистику дескрипторов сборщика мусора в составе процесса.

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

Команда GCHandles служит для поиска утечек памяти, вызываемых утечками дескрипторов сборщика мусора. Например, утечка памяти происходит, когда в коде продолжает использоваться большой массив, поскольку на него еще указывает строгий дескриптор сборщика мусора, а сам дескриптор удаляется без освобождения памяти.

GCHandleLeaks

Ищет в памяти ссылки на строгие и закрепленные дескрипторы сборщика мусора в рамках процесса и выводит результаты. При обнаружении дескриптора команда GCHandleLeaks отображает адрес ссылки. Если дескриптор в памяти не найден, выдается уведомление.

GCInfo <адрес_MethodDesc><адрес_кода>

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

GCRoot [-nostacks] <адрес_объекта>

Отображает информацию о ссылках (или корнях) объекта, находящегося по указанному адресу.

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

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

Параметр -nostacks ограничивает поиск дескрипторами сборщика мусора и объектами freachable.

GCWhere <адрес_объекта>

Отображает расположение и размер в куче сборщика мусора переданного аргумента. Если аргумент располагается в управляемой куче, но не является адресом допустимого объекта, размер отображается в виде 0 (ноль).

help [<команда>] [faq]

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

Параметр faq задает вывод ответов на часто задаваемые вопросы.

HeapStat [-inclUnrooted | -iu]

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

HistClear

Освобождает все ресурсы, используемые семейством команд Hist.

Как правило у вас нет для явного вызова HistClear, так как каждый HistInit очищает предыдущие ресурсы.

HistInit

Инициализирует структуры SOS из журнала нагрузки, сохраненного в отлаживаемом процессе.

HistObj <адрес_объекта>

Проверяет все записи журнала перемещения нагрузки и отображает цепочку перемещений сборки мусора, которые могли привести к адресу, переданному в качестве аргумента.

HisttObjFind <obj_address>

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

HistRoot <корень>

Отображает сведения о специальных предложениях и перемещениях указанного корня.

Корневое значение можно использовать для отслеживания движения объекта при сборке мусора.

IP2MD <адрес_кода>

Отображает структуру MethodDesc по указанному адресу в коде после его JIT-компиляции.

ListNearObj (lno) <адрес_объекта>

Отображает объекты перед и после указанного адреса. Команда находит в куче сборщика мусора адрес, напоминающий допустимое начало управляемого объекта (в зависимости от таблицы допустимых методов) и объект, следующий за адресом аргумента.

MinidumpMode [0] [1]

Запрещает выполнение небезопасных команд при использовании минидампа.

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

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

Name2EE <имя_модуля> <имя_типа_или_метода>

– или –

Name2EE <имя_модуля>!<имя_типа_или_метода>

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

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

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

Данная команда поддерживает следующий синтаксис отладчика Windows: <module>!<type>. Имя типа должно быть полным.

ObjSize [<адрес_объекта>] | [-aggregate] [-stat]

Отображает размер указанного объекта. Если никакие параметры не указаны, команда ObjSize выводит размеры всех объектов, найденных в управляемых потоках, все дескрипторы сборщика мусора в данном процессе, а также общий размер всех объектов, указываемых этими дескрипторами. Команда ObjSize включает в размер каждого объекта размеры всех его дочерних объектов.

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

PrintException [-nested] [-lines] [<адрес_объекта_исключения>]

– или –

PE [-nested] [<адрес_объекта_исключения>]

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

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

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

С помощью этой команды можно форматировать и просматривать поле _stackTrace, представляющее двоичный массив.

ProcInfo [-env] [-time] [-mem]

Отображает переменные среды для статистики процесса, процессорного времени ядра и использования памяти.

RCWCleanupList <адрес_RCWCleanupList>

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

SaveModule <базовый_адрес> <имя_файла>

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

SOSFlush

Очищает внутренний кэш SOS.

StopOnException [-derived] [-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 в выводе отчета Threads.

Пример:

    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.

Профилировщик CLR можно загрузить из Центра загрузки Майкрософт.

U [-gcinfo] [-ehinfo] [-n] <адрес_MethodDesc> | <адрес_кода>

Отображает дизассемблированный код с примечаниями для управляемого метода, заданного указателем структуры MethodDesc или адресом кода внутри тела метода. Команда U отображает весь метод от начала до конца, с примечаниями, преобразующими маркеры метаданных в имена.

  • Параметр -gcinfo предписывает команде U вывести содержимое структуры GCInfo для данного метода.

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

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

VerifyHeap

Проверяет кучу сборщика мусора на наличие признаков повреждения и отображает обнаруженные ошибки.

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

VerifyObj <адрес_объекта>

Проверяет объект, передаваемый в качестве аргумента, на признаки повреждения.

VMMap

Выполняет обход виртуального адресного пространства и отображает тип защиты для каждого региона.

VMStat

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

Заметки

Для работы с расширением отладки SOS его следует загрузить в отладчик WinDbg.exe, также доступный на сайте WDK и средств разработки, или в Visual Studio. Команды можно выполнять в среде WinDgb.exe или в окне Интерпретация в Visual Studio.

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

Загрузка расширения отладки SOS

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

.loadby sos clr

Чтобы загрузить расширение отладки SOS в Visual Studio, во время отладки выполните в окне Интерпретация следующую команду:

.load SOS.dll

Если команда будет выполнена успешно, в окне Интерпретация появится следующее сообщение:

extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded

Перед загрузкой расширения отладки SOS необходимо включить отладку неуправляемого кода в настройках проекта решения. В некоторых языковых версиях отладка неуправляемого кода по умолчанию отключается. Некоторые платформы не позволяют одновременно отлаживать управляемый и неуправляемый код.

ПримечаниеПримечание

Чтобы открыть окно Интерпретация в Visual Studio, в меню Отладка наведите указатель на пункт Окна и выберите Интерпретация.Окно Интерпретация в Visual Studio можно также открыть, нажав клавиши CTRL+ALT+I.

WinDbg.exe и Visual Studio используют версию SOS.dll, которая соответствует используемой в данный момент версии Mscorwks.dll. В версиях .NET Framework 1.1 и 2.0 файл 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

См. также

Ссылки

Командная строка Visual Studio и пакета Windows SDK

Другие ресурсы

Инструменты .NET Framework

Журнал изменений

Дата

Журнал

Причина

Апрель 2011

Добавлены сведения об использовании командных строк Visual Studio и Windows SDK.

Улучшение информации.