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


Расширение отладки SOS

Расширение отладки SOS позволяет просматривать сведения о коде, работающем в среде выполнения .NET, как в динамических процессах, так и в дампах. Это расширение предустанавливается с помощью dotnet-dump и Windbg/dbg. Также его можно скачать для использования с LLDB. Расширение отладки SOS можно использовать для:

  • Сбор сведений об управляемой куче.
  • Найдите повреждения кучи.
  • Отображение внутренних типов данных, используемых средой выполнения.
  • Просмотр сведений обо всех управляемых кодах, выполняемых внутри среды выполнения.

Синтаксис

В Windows: ![command] [options]

В Linux и macOS: sos [command] [options]

Многие команды имеют псевдонимы или сочетания клавиш в lldb: clrstack [options]

Команды

Следующую таблицу команд можно также просмотреть в разделе Справка или с помощью команды soshelp. Справку по отдельным командам можно просмотреть с помощью команды soshelp <command>.

Команда Description
bpmd [-nofuturemodule] [<имя метода имени<>> модуля] [-md><MethodDesc] -list -clear<pending breakpoint number-clearall> Создает точку останова в указанном методе указанного модуля.

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

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

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

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

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

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

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

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

Параметр -f (полный режим) отображает кадры машинного кода, в которых используются управляемые кадры, а также имя сборки и смещение функции для управляемых кадров. Этот параметр не отображает машинные кадры при использовании совместно с dotnet-dump.

Параметр -r создает дампы регистров для каждого кадра стека.

Параметр -all создает дампы для стеков всех управляемых потоков.
COMState Выдает список моделей контейнера COM для каждого потока и указатель Context, если он имеется. Эта команда поддерживается только в Windows.
DumpArray [-start startIndex<>] [длина длины<>] [-details] [-nofields] <адрес объекта массива>

–или–

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

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

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

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

Параметр -nofields отменяет отображение массивов. Этот параметр доступен только при указании параметра -details .
DumpAsync (dumpasync) [-mt<MethodTable address>] [-type partial type<name>] [-await] [-root] DumpAsync проходит кучу сборки мусора и ищет объекты, представляющие асинхронные компьютеры состояний, созданные при передаче состояния асинхронного метода в кучу. Эта команда распознает асинхронные конечные автоматы, определяемые как async void, async Task, async Task<T>, async ValueTask и async ValueTask<T>.

В выходных данных содержится блок сведений для каждого найденного объекта асинхронного конечного автомата. Они могут включать:
— строка типа объекта асинхронного компьютера состояния, включая адрес MethodTable, адрес объекта, его размер и имя типа.
— строка для имени типа компьютера состояния, содержащегося в объекте.
— список каждого поля на компьютере состояния.
— строка продолжения объекта компьютера состояния, если была зарегистрирована одна или несколько.
— обнаружены корни GC для этого асинхронного объекта компьютера состояния.
DumpAssembly<адрес сборки> Отображает сведения о сборке.

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

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

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

Используйте команду DumpMT, DumpObj, Name2EE или Token2EE, чтобы получить адрес структуры EEClass.
DumpDomain [<адрес> домена] Перечисляет каждый Assembly объект, загруженный в указанный AppDomain адрес объекта. При вызове без параметров команда DumpDomain выводит список всех объектов AppDomain в составе процесса. Так как .NET (Core) имеет только один, ДампДомен возвращает только один 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>] [<имя>_файла] Записывает в указанный файл содержимое журнала нагрузок, хранящегося в памяти. Если имя не указано, команда создает файл "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 задает вывод списка всех методов, определенных вместе с объектом.

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

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

–или–

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

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

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

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

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

Параметр -n отключает отображение имен исходных файлов и номеров строк. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладки SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки. Такое поведение можно отключить, задав параметр -n (без номеров строк).
DumpSig<sigaddr><moduleaddr> Отображает сведения о структуре Sig, находящейся по указанному адресу.
DumpSigElem<sigaddr><moduleaddr> Отображает единственный элемент объекта сигнатуры. В большинстве случаев следует использовать DumpSig для просмотра отдельных объектов сигнатур. Тем не менее, если сигнатура каким-либо образом повреждена, можно использовать DumpSigElem для чтения ее допустимых частей.
DumpStackObjects [-verify] [top stack [bottom stack]]

–или–

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поддерживается только в WinDbg.
Имя модуля Name2EE (name2ee) <или имя><метода>

–или–

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

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

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

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

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

Поддерживается только в Windows.
PrintException [-nested] [-lines] [<адрес> объекта исключения]

–или–

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

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

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

С помощью этой команды можно форматировать и просматривать поле _stackTrace, представляющее собой двоичный массив.
ProcInfo [-env] [-time] [-mem] Отображает переменные среды для статистики процесса, процессорного времени ядра и использования памяти. Поддерживается только в WinDbg.
RCWCleanupList<адрес RCWCleanupList> Отображает список вызываемых оболочек среды выполнения по указанному адресу, ожидающих очистки. Поддерживается только в WinDbg.
SaveModule<базовый адрес><имя_файла> Записывает в указанный файл образ, загруженный в память по указанному адресу. Поддерживается только в WinDbg.
SetHostRuntime [<runtime-directory>] Эта команда задает путь к среде выполнения .NET для размещения управляемого кода, который выполняется в рамках SOS в отладчике (lldb). Среда выполнения должна иметь версию не ниже 2.1.0. Если в имени каталога есть пробелы, необходимо использовать одинарные кавычки (').

Как правило, SOS пытается найти установленную среду выполнения .NET для автоматического запуска управляемого кода, но эта команда доступна при сбое. По умолчанию используется та же среда выполнения (libcoreclr), для которой выполняется отладка. Используйте эту команду, если среды выполнения, для которой выполняется отладка, недостаточно для выполнения кода SOS или если она имеет версию ниже 2.1.0.

Если при выполнении команды SOS вы получили следующее сообщение об ошибке, используйте эту команду, чтобы задать путь к 2.1.0 или большей среде выполнения .NET.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Чтобы найти путь установленной среды выполнения .NET, можно использовать dotnet-info в командной оболочке.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache-path><] [-directory search-directory<>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] Включает поддержку скачивания с сервера символов.

Параметр -ms разрешает скачивание с общедоступного сервера символов Майкрософт.

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

Параметр -cache-cache-path<> указывает каталог кэша символов. Если этот каталог не задан, по умолчанию используется $HOME/.dotnet/symbolcache.

Параметр -directory добавляет путь для поиска символов. Можно задавать несколько путей.

Параметр -sympath добавляет пути к серверу, кэшу и каталогу в формате пути к символам Windows.

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

Параметр -downloadymbols пытается скачать собственные символы .NET для среды выполнения. Поддерживается в lldb и dotnet-dump.
SOSFlush Очищает внутренний кэш SOS.
SOSStatus [-reset] Отображает внутреннее состояние SOS или сбрасывает внутреннее кэшированное состояние.
StopOnException [-производный] [-create-create2 | ] <Номер псевдорегистрирования исключений><> Предписывает отладчику остановиться при возникновении указанного исключения и продолжать работу при возникновении других исключений.

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

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

Структура SyncBlock представляет собой контейнер для дополнительной информации, которую необязательно создавать для каждого объекта. Она может включать данные COM-взаимодействия и сведения о блокировке для потокобезопасных операций.
ThreadPool Отображает сведения о пуле управляемых потоков, включая число рабочих запросов в очереди, число потоков портов завершения и число таймеров.
Threads (clrthreads) [-live] [-special] Отображает все управляемые потоки в процессе.

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

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

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

В качестве параметра имени модуля можно указать *, чтобы узнать, с чем сопоставляется токен в каждом из загруженных управляемых модулей. Можно также задать имя отладчика для модуля, например mscorlib или image00400000.
U [-gcinfo] [-ehinfo] [-n]< MethodDesc address> | <Адрес кода> Отображает дизассемблированный код с примечаниями для управляемого метода, заданного указателем структуры MethodDesc или адресом кода в теле метода. Команда U отображает весь метод от начала до конца, с примечаниями, преобразующими токены метаданных в имена.

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

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

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

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

Dotnet-Dump

Список доступных команд SOS с dotnet-dump analyze см. в разделе dotnet-dump.

Отладчик Windows

Вы также можете использовать расширение отладки SOS, загрузив его в отладчик WinDbg/dbg и выполнив команды в отладчике Windows. Команды SOS можно использовать для активных процессов или дампов.

Windbg должен автоматически загружать расширение SOS всякий раз, когда отлаживаемый процесс содержит среду выполнения .NET (coreclr.dll или libcoreclr.so).

Отладчик LLDB

Инструкции по настройке расширения SOS для LLDB см. в разделе dotnet-sos. Команды SOS можно использовать для активных процессов или дампов.

По умолчанию можно получить доступ ко всем командам SOS, введя sos [command_name]. Тем не менее стандартные команды имеют псевдонимы, в связи с чем префикс sos не нужен:

Команда Function
analyzeoom Отображает сведения о последнем объекте OOM, возникшем в запросе на выделение кучи GC.
bpmd Создание точки останова в указанном управляемом методе указанного модуля.
clrmodules Перечисляет управляемые модули в процессе.
clrstack Обеспечивает трассировку стека только для управляемого кода.
clrthreads Перечисляет управляемые потоки, которые выполняются.
clru Отображение дизассемблированного кода с аннотациями для управляемого метода.
dbgout Включает или отключает-off внутреннее ведение журнала SOS.
dso Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека.
dumpalc Отображает сведения о коллекционируемом assemblyLoadContext, в который загружается указанный объект.
dumparray Отображает сведения об управляемом массиве.
dumpasync Отображение сведений об асинхронных конечных автоматах для кучи со сборкой мусора.
dumpassembly Отображение сведений о сборке.
dumpclass Отображение сведений о структуре EEClass, находящейся по указанному адресу.
dumpconcurrentdictionary Отображает параллельное содержимое словаря.
dumpconcurrentqueue Отображает содержимое параллельной очереди.
dumpdelegate Отображение сведений о делегате.
dumpdomain Отображает сведения обо всех сборках в пределах всех доменов приложений или указанных.
dumpgcdata Отображает сведения о данных GC.
dumpgen Отображает содержимое кучи для указанного поколения.
dumpheap Отображение сведений о куче со сборкой мусора и статистики сборки мусора по объектам.
dumpil Отображает общий промежуточный язык (CIL), связанный с управляемым методом.
dumplog Записывает в указанный файл содержимое журнала нагрузок, хранящегося в памяти.
dumpmd Отображение сведений о структуре MethodDesc, находящейся по указанному адресу.
dumpmodule Отображение сведений о модуле, находящемся по указанному адресу.
dumpmt Отображение сведений о таблице методов, расположенной по указанному адресу.
dumpobj Отображение сведений об объекте, находящемся по указанному адресу.
dumpruntimetypes Находит все объекты System.RuntimeType в куче GC и выводит имя типа и MethodTable, которые они ссылаются.
dumpsig Дамп подписи метода или поля, указанного в <sigaddr> <moduleaddr>.
dumpsigelem Дамп одного элемента объекта сигнатуры.
dumpstack Отображение трассировки машинного и управляемого стека.
dumpstackobjects Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека.
dumpvc Отображает сведения о полях класса значений.
eeheap Отображение сведений о памяти процессов, занятой внутренними структурами данных среды выполнения.
eestack Выполнение команды dumpstack для всех потоков в составе процесса.
eeversion Отображает сведения о версиях среды выполнения и SOS.
ehinfo Отображает блоки обработки исключений в методе JIT-ed.
finalizequeue Отображает все объекты, зарегистрированные для заключительной обработки.
findappdomain Пытается устранить домен приложения объекта GC.
findroots Находит и отображает корни объектов в коллекциях GC.
gchandles Отображает статистику дескрипторов сборщика мусора в составе процесса.
gcheapstat Отображает статистику о сборщике мусора.
gcinfo Отображает кодировку JIT GC для метода.
gcroot Отображение сведений о ссылках (или корневых элементах) объекта, который расположен по указанному адресу.
gcwhere Отображает расположение в куче GC указанного адреса.
histclear Освобождение всех ресурсов, используемых семейством команд Hist.
histinit Инициализирует структуры SOS из журнала нагрузки, сохраненного в отлаживаемом объекте.
histobj Проверяет все записи журнала перемещения нагрузки и отображает цепочку перемещений сборки мусора, которые могли привести к адресу, переданному в качестве аргумента.
histobjfind Отображение всех записей журнала, ссылающихся на объект по указанному адресу.
histroot Отображает сведения о повышениях и перемещениях указанного корневого элемента.
histstats Отображает статистику журнала стресса.
ip2md Отображает структуру MethodDesc по указанному адресу в коде после его JIT-компиляции.
listnearobj Отображает предыдущий объект и успешное выполнение указанного адреса.
loadsymbols Загружает символы собственного модуля .NET.
logging Включает или отключает внутреннее ведение журнала SOS.
name2ee Отображение структур MethodTable и EEClass для указанного типа или метода в указанном модуле.
objsize Отображает размер указанного объекта.
parallelstacks Отображает стек объединенных потоков аналогично панели "Параллельные стеки" Visual Studio.
pathto Отображает путь к GC от <root> <target>.
pe Отображает и форматирует поля всех производных объектов класса Exception, находящегося по указанному адресу.
printexception Отображает и форматирует поля всех производных объектов класса Exception, находящегося по указанному адресу.
runtimes Выводит список сред выполнения в целевом объекте или измените среду выполнения по умолчанию.
stoponcatch Целевой процесс прерывает следующий раз, когда во время выполнения перехватится управляемое исключение.
setclrpath Задание пути для загрузки файлов coreclr dac/dbi. setclrpath <path>.
sethostruntime Задает или отображает каталог среды выполнения .NET, используемый для запуска управляемого кода в SOS.
setsymbolserver Включение поддержки сервера символов.
setsostid Задание текущего индекса TID или потока операционной системы вместо предоставляемого средством lldb. setsostid <tid> <index>.
sos Выполняет различные команды отладки coreclr. Используйте синтаксис sos <command-name> <args>. Дополнительные сведения можно получить с помощью команды soshelp.
soshelp Отображает все доступные команды, если параметр не указан или отображает подробные сведения о указанной команде: soshelp <command>
syncblk Отображение сведений о заполнителе SyncBlock.
taskstate Отображает состояние задачи в удобочитаемом формате.
threadpool Отображает сведения о пуле потоков среды выполнения.
threadpoolqueue Отображает рабочие элементы пула потоков очереди.
threadstate Довольно печатает значение состояния потоков.
timerinfo Отображает сведения о выполнении таймеров.
token2ee Отображает структуру MethodTable и структуру MethodDesc для указанного токена и модуля.
traverseheap Записывает данные кучи в файл в формате, понятном профилировщиком СРЕДЫ CLR.
verifyheap Проверяет кучу GC на наличие признаков повреждения.
verifyobj Проверяет объект, передаваемый в качестве аргумента, на наличие повреждений.

Пример использования Windbg/cdb

Команда Description
!dumparray -start 2 -length 5 -details 00ad28d0 Отображение содержимого массива по адресу 00ad28d0. Отображаются данные для пяти элементов массива, начиная со второго.
!dumpassembly 1ca248 Отображение содержимого сборки по адресу 1ca248.
!dumpheap Отображение сведений о куче сборщика мусора.
!DumpLog Запись содержимого журнала нагрузок в памяти в файл "StressLog.txt" (по умолчанию), расположенный в текущем каталоге.
!dumpmd 902f40 Отображение структуры MethodDesc по адресу 902f40.
!dumpmodule 1caa50 Отображение сведений о модуле, находящемся по адресу 1caa50.
!DumpObj a79d40 Отображение сведений об объекте, находящемся по адресу a79d40.
!DumpVC 0090320c 00a79d9c Отображение полей класса значений по адресу 00a79d9c с использованием таблицы методов по адресу 0090320c.
!eeheap -gc Отображение памяти процесса, используемой сборщиком мусора.
!finalizequeue Отображение всех объектов, запланированных для заключительной обработки.
!findappdomain 00a79d98 Определение домена приложения для объекта, находящегося по адресу 00a79d98.
!gcinfo 5b68dbb8 Отображение всех дескрипторов сборщика мусора в текущем процессе.
!name2ee unittest.exe MainClass.Main Отображение структур MethodTable и EEClass для метода Main класса MainClass в модуле unittest.exe.
!token2ee unittest.exe 02000003 Отображение сведений о токене метаданных по адресу 02000003 в модуле unittest.exe.

Пример использования LLDB

Команда Description
dumparray -start 2 -length 5 -details 00ad28d0 Отображение содержимого массива по адресу 00ad28d0. Отображаются данные для пяти элементов массива, начиная со второго.
dumpassembly 1ca248 Отображение содержимого сборки по адресу 1ca248.
dumpheap Отображение сведений о куче сборщика мусора.
dumplog Запись содержимого журнала нагрузок в памяти в файл "StressLog.txt" (по умолчанию), расположенный в текущем каталоге.
dumpmd 902f40 Отображение структуры MethodDesc по адресу 902f40.
dumpmodule 1caa50 Отображение сведений о модуле, находящемся по адресу 1caa50.
dumpobj a79d40 Отображение сведений об объекте, находящемся по адресу a79d40.
dumpvc 0090320c 00a79d9c Отображение полей класса значений по адресу 00a79d9c с использованием таблицы методов по адресу 0090320c.
eeheap -gc Отображение памяти процесса, используемой сборщиком мусора.
findappdomain 00a79d98 Определение домена приложения для объекта, находящегося по адресу 00a79d98.
gcinfo 5b68dbb8 Отображение всех дескрипторов сборщика мусора в текущем процессе.
name2ee unittest.exe MainClass.Main Отображение структур MethodTable и EEClass для метода Main класса MainClass в модуле unittest.exe.
token2ee unittest.exe 02000003 Отображение сведений о токене метаданных по адресу 02000003 в модуле unittest.exe.
clrthreads Отображение управляемых потоков.

См. также