Расширение отладки 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] [ стек [bottom top стек]] |
Отображает трассировку стека. Параметр -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 |
Отображение управляемых потоков. |