Расширения отладчика .NET
Расширения отладчика .NET позволяют просматривать сведения о коде, работающем внутри среды выполнения .NET, как в динамических процессах, так и в дампах. Расширения предварительно установлены с Windbgи могут быть скачаны для использования с LLDB. Расширения отладчика .NET можно использовать для:
- Сбор сведений об управляемой куче.
- Найдите повреждения кучи.
- Отображение внутренних типов данных, используемых средой выполнения.
- Просмотр сведений обо всех управляемых кодах, выполняемых внутри среды выполнения.
Расширения отладчика .NET включают команды из существующего средства dotnet-sos, а также новые команды. Ограниченный набор команд теперь поддерживается для среды выполнения AOT в машинном коде.
Синтаксис
Под ветром: ![command] [options]
В разделе LLDB: sos [command] [options]
Многие команды имеют псевдонимы или сочетания клавиш в LLDB: clrstack [options]
Команды
Следующая таблица команд также доступна в разделе справки soshelp <command>
.
Команда | Описание |
---|---|
bpmd [-nofuturemodule] [<имя метода><метода>] [-md<MethodDesc >] -list-clear<ожидающего номера точки останова>-clearall |
Создает точку останова в указанном методе в указанном модуле. Если указанный модуль и метод не загружены, эта команда ожидает уведомления о том, что модуль был загружен и JIT-код скомпилирован перед созданием точки останова. Список ожидающих точек останова можно управлять с помощью -list, -clearи -clearall параметров: Параметр -list создает список всех ожидающих точек останова. Если в ожидающей точке останова есть идентификатор модуля, ненулевой, эта точка останова зависит от функции в этом конкретном загруженном модуле. Если ожидающая точка останова имеет нулевой идентификатор модуля, эта точка останова применяется к модулям, которые еще не загружены. Используйте параметр -clear или -clearall, чтобы удалить ожидающие точки останова из списка. |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Предоставляет трассировку стека только управляемого кода. Параметр -p отображает аргументы управляемой функции. Параметр -l -l отображает сведения о локальных переменных в кадре. Расширения отладчика .NET не могут получить локальные имена, поэтому выходные данные для локальных имен имеют формат <локального адреса>=<значение>. Параметр -a — это ярлык для -l и -p объединенных. Параметр -n отключает отображение имен исходных файлов и номеров строк. Если отладчик имеет указанный параметр SYMOPT_LOAD_LINES, SOS ищет символы для каждого управляемого кадра, а в случае успешного выполнения отображает соответствующее имя исходного файла и номер строки. Параметр -n (без номеров строк) можно указать, чтобы отключить это поведение. Параметр -f (полный режим) отображает собственные кадры, пересекая их с управляемыми кадрами и именем сборки и смещением функции для управляемых кадров. Этот параметр не отображает собственные кадры при использовании с dotnet-dump .Параметр -r сбрасывает регистры для каждого кадра стека. Параметр -all сбрасывает стеки всех управляемых потоков. |
COMState | Перечисляет модель COM-квартиры для каждого потока и указатель Context , если он доступен. Эта команда поддерживается только в Windows. |
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <адрес объекта массива> -или- DA [-start<startIndex>] [-length<length>] [-details] [-nofields] адрес объекта массива> |
Проверяет элементы объекта массива. Параметр -start указывает начальный индекс, по которому будут отображаться элементы. Параметр -length указывает количество элементов для отображения. Параметр Параметр -nofields запрещает отображение массивов. Этот параметр доступен только при указании параметра -details. |
DumpAsync (dumpasync) [-mt -mt<MethodTable address>] [-type<имя частичного типа>] [-await] [-root] | DumpAsync проходит кучу, собранную мусором, и ищет объекты, представляющие асинхронные компьютеры состояний, созданные при передаче состояния асинхронного метода в кучу. Эта команда распознает асинхронные компьютеры состояний, определенные как async void , async Task , async Task<T> , async ValueTask и async ValueTask<T> .Выходные данные включают блок сведений для каждого найденного объекта асинхронного компьютера состояния. К этим сведениям относятся: — строка типа объекта асинхронного компьютера состояния, включая адрес MethodTable, адрес объекта, его размер и имя типа. — строка для имени типа компьютера состояния, содержащегося в объекте. — список каждого поля на компьютере состояния. — строка продолжения объекта компьютера состояния, если была зарегистрирована одна или несколько. — обнаружены корни GC для этого асинхронного объекта компьютера состояния. Поддерживается для собственных приложений AOT. |
Отображает сведения о сборке. Команда DumpAssembly содержит несколько модулей, если они существуют. Адрес сборки можно получить с помощью команды DumpDomain. |
|
Отображает сведения о структуре EEClass , связанной с типом.Команда DumpClass отображает статические значения полей, но не отображает нестатические значения полей. Чтобы получить адрес структуры |
|
DumpDomain [<адрес домена>] | Перечисляет каждый объект Assembly, загруженный в указанный адрес объекта AppDomain. При вызове без параметров команда DumpDomain перечисляет все объекты AppDomain в процессе. Так как .NET (Core) имеет только один AppDomain, DumpDomain возвращает только один объект. |
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt -<mt methodTable address>] [-type<имя частичного типа>] [start [end]] | Отображает сведения о сборе мусора и статистике сбора данных об объектах. Команда DumpHeap отображает предупреждение, если обнаруживается чрезмерная фрагментация в куче сборщика мусора. Параметр -stat ограничивает выходные данные сводным статистическим типом. Параметр -strings ограничивает выходные данные сводкой статистических строк. Параметр -short ограничивает выходные данные только адресом каждого объекта. Эта команда позволяет легко передавать выходные данные из команды в другую команду отладчика для автоматизации. Параметр -min игнорирует объекты, которые меньше параметра size , указанного в байтах.Параметр -max игнорирует объекты, превышающие параметр size , указанный в байтах.Параметр -thinlock сообщает ThinLocks. Дополнительные сведения см. в команде SyncBlk Параметр -startAtLowerBound заставляет кучи начинаться с нижней границы заданного диапазона адресов. На этапе планирования куча часто недоступна, так как объекты перемещаются. Этот параметр заставляет DumpHeap начать свою прогулку по указанной нижней границе. Для работы этого параметра необходимо указать адрес допустимого объекта в качестве нижней границы. Память можно отобразить в адресе плохого объекта, чтобы вручную найти следующую таблицу методов. Если сборка мусора в настоящее время находится в вызове memcopy , вы также можете найти адрес следующего объекта, добавив размер в начальный адрес, который предоставляется в качестве параметра.Параметр -mt содержит только те объекты, которые соответствуют указанной структуре MethodTable .Параметр -type содержит только те объекты, имя типа которых соответствует подстроке указанной строки. Параметр start начинает перечисление из указанного адреса.Параметр end останавливает перечисление по указанному адресу.Поддерживается для собственных приложений AOT. |
Отображает общий промежуточный язык (CIL), связанный с управляемым методом. Динамический CIL создается не так, как CIL, загруженный из сборки. Динамический CIL относится к объектам в массиве управляемых объектов, а не к маркерам метаданных. |
|
DumpLock [--allthreads] [--waits] | Отображает сведения о объектах System.Threading.Lock, таких как те, которые хранятся потоками (по умолчанию), или те, которые ожидаются потоками. |
DumpLog [-addr<addressOfStressLog>] [<Имя файла>] | Записывает содержимое журнала стресса в памяти в указанный файл. Если имя не указано, эта команда создает файл с именем StressLog.txt в текущем каталоге. Журнал стресса в памяти помогает диагностировать стрессовые сбои без использования блокировок или ввода-вывода. Чтобы включить журнал стрессов, задайте следующие разделы реестра в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 Необязательный параметр -addr позволяет указать журнал стресса, отличный от журнала по умолчанию.Поддерживается для собственных приложений AOT. |
dumpMD<address MethodDesc> | Отображает сведения о структуре MethodDesc по указанному адресу.Для получения адреса структуры MethodDesc из управляемой функции можно использовать команду IP2MD. |
DumpMT [-MD] <адрес methodTable> | Отображает сведения о таблице методов по указанному адресу. При указании параметра -MD отображается список всех методов, определенных объектом. Каждый управляемый объект содержит указатель таблицы методов. |
DumpModule [-mt] <адрес модуля> | Отображает сведения о модуле по указанному адресу. Параметр -mt отображает типы, определенные в модуле, и типы, на которые ссылается модуль. Для получения адреса модуля можно использовать команду DumpDomain или DumpAssemb ly. |
DumpObj [-nofields] <адрес объекта> -или- адрес объекта DO<> |
Отображает сведения об объекте по указанному адресу. Команда DumpObj отображает поля, сведения о структуре EEClass , таблицу методов и размер объекта.Для получения адреса объекта можно использовать команду DumpStackObjects. Вы можете выполнить команду DumpObj в полях типа CLASS , так как они также являются объектами.Параметр - nofields предотвращает отображение полей объекта, полезно для таких объектов, как String. |
DumpRuntimeTypes | Отображает объекты типа среды выполнения в куче сборщика мусора и перечисляет их связанные имена типов и таблицы методов. |
DumpStack [-EE] [-n] [top stack [bottom stack]] |
Отображает трассировку стека. Параметр -EE приводит к тому, что команда DumpStack отображает только управляемые функции. Используйте параметры top и bottom , чтобы ограничить кадры стека, отображаемые на платформах x86.Параметр -n отключает отображение имен исходных файлов и номеров строк. Если отладчик имеет указанный параметр SYMOPT_LOAD_LINES, SOS будет искать символы для каждого управляемого кадра, а в случае успешного отображения соответствующего имени исходного файла и номера строки. Параметр -n (без номеров строк) можно указать, чтобы отключить это поведение. |
DumpSig<sigaddr><moduleaddr> | Отображает сведения о структуре Sig по указанному адресу. |
DumpSigElem<><moduleaddr> | Отображает один элемент объекта подписи. В большинстве случаев следует использовать DumpSig для просмотра отдельных объектов подписи. Однако если подпись была повреждена каким-то образом, можно использовать DumpSigElem для чтения допустимых частей. |
DumpStackObjects [-verify] [top stack [bottom stack]]-или- DSO [-verify] [ top stack [bottom stack]] |
Отображает все управляемые объекты, найденные в пределах текущего стека. Параметр -verify проверяет каждое нестатическое CLASS поле поля объекта.Используйте команду DumpStackObject с командами трассировки стека, такими как K (windbg) или bt (lldb) вместе с командой clrstack clrstack, чтобы определить значения локальных переменных и параметров. |
адрес DumpVC<MethodTable><address> | Отображает сведения о полях класса значений по указанному адресу. Параметр methodTable |
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 (RCW), ожидающие очистки. Обе эти структуры данных кэшируются и очищаются потоком завершения при запуске.Параметр -allReady отображает все объекты, готовые к завершению, независимо от того, помечены ли они сборкой мусора как таковой, или будут помечены следующей сборкой мусора. Объекты, которые находятся в списке "готово к завершению", являются завершаемыми объектами, которые больше не являются корневыми. Этот параметр может быть дорогостоящим, так как он проверяет, являются ли все объекты в завершаемых очередях по-прежнему корневыми.Параметр -short ограничивает выходные данные адресом каждого объекта. Если он используется с -allReady, он перечисляет все объекты, имеющие средство завершения, которые больше не являются корневыми. Если он используется независимо, он перечисляет все объекты в готовых и готовых к завершению очередей. |
Определяет домен приложения объекта по указанному адресу. | |
FindRoots-gen<N> | -gen any | адрес объекта<> | Вызывает разрыв отладчика в отладчике в следующей коллекции указанного поколения. Эффект сбрасывается сразу после того, как происходит разрыв. Чтобы разорвать следующую коллекцию, необходимо повторно выполнить команду. Адрес объекта <> форме этой команды используется после разрыва, вызванного -gen или -gen любой. В то время отладчик находится в правильном состоянии для FindRoots для идентификации корней для объектов из текущих осуждаемых поколений. Поддерживается только в Windows. |
GCHandles [-perdomain] | Отображает статистику о дескрипторах сборщика мусора в процессе. Параметр -perdomain упорядочивает статистику по домену приложения. Используйте команду GCHandles, чтобы найти утечки памяти, вызванные утечками сборщика мусора. Например, утечка памяти возникает, когда код сохраняет большой массив, так как надежный дескриптор сборщика мусора по-прежнему указывает на него, а дескриптор удаляется без освобождения. Поддерживается только в Windows. |
GCHandleLeaks | Выполняет поиск в памяти всех ссылок на надежные и закрепленные сборщики мусора в процессе и отображает результаты. Если дескриптор найден, команда GCHandleLeaks отображает адрес ссылки. Если дескриптор не найден в памяти, эта команда отображает уведомление. Поддерживается только в Windows. |
адрес GCInfo<MethodDesc><адрес кода> | Отображает данные, указывающие, когда регистры или расположения стека содержат управляемые объекты. Если происходит сборка мусора, сборщик должен знать расположения ссылок на объекты, чтобы они могли обновляться с новыми значениями указателя объектов. |
GCRoot [-nostacks] [-all] <адрес объекта> | Отображает сведения о ссылках (или корнях) на объект по указанному адресу. Команда GCRoot проверяет всю управляемую кучу и таблицу дескрипторов в других объектах и обрабатывает их в стеке. Затем каждый стек выполняет поиск указателей на объекты, а очередь завершения также выполняется поиск. Эта команда не определяет, является ли корень стека допустимым или удален. Используйте Параметр -nostacks ограничивает поиск дескрипторами сборщика мусора и доступными объектами. Параметр -all заставляет отображать все корни вместо уникальных корней. |
адрес объекта GCWhere<> | Отображает расположение и размер в куче сборки мусора переданного аргумента. Если аргумент находится в управляемой куче, но не является допустимым адресом объекта, размер отображается как 0 (ноль). |
справка (soshelp) [<command>] [faq ] |
Отображает все доступные команды, если параметр не указан или отображает подробные сведения о указанной команде. Параметр faq отображает ответы на часто задаваемые вопросы. |
HeapStat [-inclUnrooted | -iu] | Отображает размеры поколения для каждой кучи и общее свободное пространство в каждом поколении на каждой куче. Если указан параметр -inclUnrooted, отчет содержит сведения об управляемых объектах из кучи сборки мусора, которая больше не является корневой. Поддерживается только в Windows. |
HistClear | Освобождает все ресурсы, используемые семейством команд Hist .Как правило, не нужно явно вызывать HistClear , так как каждая HistInit очищает предыдущие ресурсы. |
HistInit | Инициализирует структуры SOS из журнала стресса, сохраненного в отладчике. |
HistObj<obj_address> | Проверяет все записи перемещений журнала стресса и отображает цепочку перемещения сборки мусора, которая, возможно, привела к адресу, переданном в качестве аргумента. |
HistObjFind<obj_address> | Отображает все записи журнала, ссылающиеся на объект по указанному адресу. |
Отображает сведения, связанные как с повышением, так и с перемещением указанного корневого каталога. Корневое значение можно использовать для отслеживания перемещения объекта через сборки мусора. |
|
IP2MD (ip2md) <адрес кода> | Отображает структуру MethodDesc по указанному адресу в коде, который был скомпилирован JIT-компиляцией. |
ListNearObj (lno) <obj_address> | Отображает объекты, предыдущие и следующие указанные адреса. Команда ищет адрес в куче сборки мусора, которая выглядит как допустимое начало управляемого объекта (на основе допустимой таблицы методов) и объект после адреса аргумента. Поддерживается только в Windows. |
MinidumpMode [0] [1] | Запрещает выполнение небезопасных команд при использовании мини-dump. Передайте 0, чтобы отключить эту функцию или 1, чтобы включить эту функцию. По умолчанию значение MinidumpMode имеет значение 0. Minidumps, созданные с помощью команды .dump /m или команды .dump имеют ограниченные данные среды CLR и позволяют правильно выполнять только подмножество команд SOS. Некоторые команды могут завершиться сбоем с непредвиденными ошибками, так как необходимые области памяти не сопоставляются или сопоставляются только частично. Этот параметр защищает вас от выполнения небезопасных команд от мини-dumps. Поддерживается только в Windbg. |
Name2EE (name2ee) <имени модуля><типа или имени метода> -или- Name2EE<имя модуля>!<имя типа или метода> |
Отображает структуру MethodTable и EEClass структуру для указанного типа или метода в указанном модуле.Указанный модуль должен быть загружен в процессе. Чтобы получить правильное имя типа, просмотрите модуль с помощью Ildasm.exe (IL Disassembler). Вы также можете передать * в качестве параметра имени модуля для поиска всех загруженных управляемых модулей. Имя модуля также может быть именем отладчика для модуля, например mscorlib или image00400000 .Эта команда поддерживает синтаксис отладчика Windows < module >! <type >. Тип должен быть полностью квалифицирован. |
ObjSize [<адрес объекта>] | [-агрегатные] [-stat] | Отображает размер указанного объекта. Если параметры не указаны, команда ObjSize отображает размер всех объектов, найденных в управляемых потоках, отображает все дескрипторы сборщика мусора в процессе и суммирует размер всех объектов, на которые указывает эти дескрипторы. Команда ObjSize включает размер всех дочерних объектов в дополнение к родительскому элементу. Параметр -aggregate можно использовать с аргументом -stat для получения подробного представления типов, которые по-прежнему коренятся. Используя !dumpheap -stat и !objsize -aggregate -stat, можно определить, какие объекты больше не корень и диагностировать различные проблемы с памятью. Поддерживается только в Windows. |
-или- PE [-вложенные] [<адрес объекта исключения>] |
Отображает и форматирует поля любого объекта, производного от класса Exception по указанному адресу. Если адрес не указан, команда PrintExcept ion отображает последнее исключение, возникающее в текущем потоке. Параметр -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<пути к кэшу>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL->] | Включает поддержку загрузки сервера символов. Параметр -ms включает скачивание с общедоступного сервера символов Майкрософт. Параметр -disable включает поддержку загрузки символов. Параметр -cache<пути к кэшу> указывает каталог кэша символов. Значение по умолчанию — $HOME/.dotnet/symbolcache, если оно не указано. Параметр -directory добавляет путь для поиска символов. Может быть несколько. Параметр -sympath добавляет пути к серверу, кэшу и каталогу в формате пути символов Windows. Параметр -log включает ведение журнала загрузки символов. Параметр -downloadymbols пытается скачать собственные символы .NET для среды выполнения. Поддерживается в lldb и dotnet-dump. |
SOSFlush | Очищает внутренний кэш SOS. |
SOSStatus [-reset] | Отображает внутреннее состояние SOS или сбрасывает внутреннее кэшированное состояние. |
StopOnException [-производные] [-create | -create2 -create2<]><псевдорегистрирующего номера> | Приводит к остановке отладчика при возникновении указанного исключения, но продолжить выполнение при возникновении других исключений. Параметр -производный перехватывает указанное исключение и каждое исключение, наследуемое от указанного исключения. Поддерживается только в Windbg. |
SyncBlk [-all | <число syncblk>] | Отображает указанную SyncBlock структуру или все SyncBlock структуры. Если аргументы не передаются, команда SyncBlk Структура SyncBlock — это контейнер для дополнительных сведений, которые не нужно создавать для каждого объекта. Он может содержать данные COM-взаимодействия, хэш-коды и блокировку сведений для потоковобезопасных операций. |
ThreadPool | Отображает сведения о управляемом пуле потоков, включая количество рабочих запросов в очереди, количество потоков портов завершения и количество таймеров. |
потоки (clrthreads) [-live] [-special] | Отображает все управляемые потоки в процессе. Команда threads отображает отладчик короткий идентификатор, идентификатор потока CLR и идентификатор потока операционной системы. Кроме того, команда Threads отображает столбец домена, указывающий домен приложения, в котором выполняется поток, столбец APT, отображающий режим квартиры COM, и столбец исключений, отображающий последнее исключение, возникающее в потоке. Параметр -live отображает потоки, связанные с динамическим потоком. Параметр -special отображает все специальные потоки, созданные средой CLR. Специальные потоки включают потоки сборки мусора (в параллельной и серверной сборке мусора), вспомогательные потоки отладчика, потоки завершения, AppDomain выгрузить потоки и потоки таймера пула потоков. Поддерживается для собственных приложений AOT. |
поле ThreadState <State value> | Отображает состояние потока. Параметр value — это значение поля State в выходных данных отчета потоках. |
Token2EE<имя модуля><токена> | Преобразует указанный маркер метаданных в указанном модуле в структуру MethodTable или MethodDesc структуру.Вы можете передать * для параметра имени модуля, чтобы найти то, что маркер сопоставляется с каждым загруженным управляемым модулем. Вы также можете передать имя отладчика для модуля, например mscorlib или image00400000 . |
Отображает аннотированную дизассемблию управляемого метода, указанного указателем структуры MethodDesc для метода или адресом кода в тексте метода. Команда U отображает весь метод от начала до конца с заметками, которые преобразуют маркеры метаданных в имена.Параметр -gcinfo приводит к тому, что команда U отображает структуру GCInfo для метода.Параметр -ehinfo отображает сведения об исключении для метода. Эти сведения также можно получить с помощью команды EHInfo. Параметр -n отключает отображение имен исходных файлов и номеров строк. Если отладчик имеет указанный параметр SYMOPT_LOAD_LINES, SOS ищет символы для каждого управляемого кадра, а при успешном выполнении отображает соответствующее имя исходного файла и номер строки. Вы можете указать параметр -n, чтобы отключить это поведение. |
|
VerifyHeap | Проверяет кучу сборщика мусора на наличие признаков повреждения и отображает обнаруженные ошибки. Повреждения кучи могут быть вызваны вызовами платформы, которые создаются неправильно. Поддерживается для собственных приложений AOT. |
адрес объекта VerifyObj<> | Проверяет объект, переданный в качестве аргумента для признаков повреждения. Поддерживается только в Windows. |
VMMap | Проходит по виртуальному адресное пространство и отображает тип защиты, применяемый к каждому региону. Поддерживается только в Windbg. |
VMStat | Предоставляет сводное представление виртуального адресного пространства, упорядоченное по каждому типу защиты, применяемой к этой памяти (бесплатный, зарезервированный, зафиксированный, частный, сопоставленный, образ). Столбец TOTAL отображает результат среднего столбца, умноженного на столбец BLK COUNT. Поддерживается только в Windbg. |
Отладчик Windows
Расширения отладчика .NET можно также использовать, загрузив его в отладчик WinDbg/dbg и выполняя команды в отладчике Windows. Команды можно использовать в динамических процессах или дампах.
Windbg должен автоматически загружать расширение при отладке процесса, содержащего среду выполнения .NET (coreclr.dll или libcoreclr.so).
Отладчик LLDB
Инструкции по настройке расширений отладчика .NET для LLDB см. в расширения dotnet-debugger-extensions. Команды можно использовать в динамических процессах или дампах.
По умолчанию можно достичь всех команд, введя следующее: sos [command_name]
. Однако общие команды были псевдонимами, чтобы вам не понадобился префикс sos
:
Команда | Функция |
---|---|
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), связанный с управляемым методом. |
dumplock |
Отображает сведения о объектах System.Threading.Lock, таких как те, которые хранятся потоками (по умолчанию), или те, которые ожидаются потоками. Эта команда доступна только в расширениях отладчика .NET |
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 |
Задает путь к загрузке файлов dac/dbi coreclr.
setclrpath <path> . |
sethostruntime |
Задает или отображает каталог среды выполнения .NET, используемый для запуска управляемого кода в SOS. |
setsymbolserver |
Включает поддержку сервера символов. |
setsostid |
Задает текущий индекс ос tid/thread вместо использования одной из предоставляемых 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
Команда | Описание |
---|---|
!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
Команда | Описание |
---|---|
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 |
Отображает управляемые потоки. |