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

Расширение отладки SOS (SOS.dll) позволяет выполнять отладку управляемых программ в Visual Studio и отладчике Windows (WinDbg.exe), предоставляя информацию о внутренней среде CLR.The SOS Debugging Extension (SOS.dll) helps you debug managed programs in Visual Studio and in the Windows debugger (WinDbg.exe) by providing information about the internal Common Language Runtime (CLR) environment. Для работы этой программы в проекте необходимо включить отладку неуправляемого кода.This tool requires your project to have unmanaged debugging enabled. Библиотека "SOS.dll" автоматически устанавливается с .NET Framework.SOS.dll is automatically installed with the .NET Framework. Для работы с библиотекой SOS.dll в Visual Studio установите Комплект разработки драйверов для Windows (WDK).To use SOS.dll in Visual Studio, install the Windows Driver Kit (WDK).

СинтаксисSyntax

![command] [options]

КомандыCommands

КомандаCommand ОписаниеDescription
AnalyzeOOM (ao)AnalyzeOOM (ao) Отображает сведения по последнему событию "Недостаточно памяти" (OOM), произошедшему при запросе на выделение памяти в куче для сборки мусора.Displays the information for the last out of memory (OOM) that occurred on an allocation request to the garbage collection heap. (В сборке мусора сервера отображает произошедшее событие OOM для каждой кучи сборки мусора.)(In server garbage collection, it displays OOM, if any, on each garbage collection heap.)
BPMD [-nofuturemodule] [<имя модуля> <имя метода>] [-md <MethodDesc>] -list -clear <номер ожидающей точки останова> -clearallBPMD [-nofuturemodule] [<module name> <method name>] [-md <MethodDesc>] -list -clear <pending breakpoint number> -clearall Создает точку останова в указанном методе указанного модуля.Creates a breakpoint at the specified method in the specified module.

Если указанные модуль и метод не загружены, команда ожидает уведомления о загрузке модуля и выполнении JIT-компиляции, прежде чем создавать точку останова.If the specified module and method have not been loaded, this command waits for a notification that the module was loaded and just-in-time (JIT) compiled before creating a breakpoint.

Списком ожидающих точек останова можно управлять с помощью параметров -list, -clear и -clearall.You can manage the list of pending breakpoints by using the -list, -clear, and -clearall options:

Параметр -list создает список всех ожидающих точек останова.The -list option generates a list of all the pending breakpoints. Если ожидающая точка останова имеет идентификатор модуля, отличный от нуля, эта точка останова связана с функцией в конкретном загруженном модуле.If a pending breakpoint has a non-zero module ID, that breakpoint is specific to a function in that particular loaded module. Если ожидающая точка останова имеет нулевой идентификатор модуля, такая точка останова применяется к еще не загруженным модулям.If the pending breakpoint has a zero module ID, that breakpoint applies to modules that have not yet been loaded.

Чтобы удалить из списка ожидающие точки останова, следует использовать параметр -clear или -clearall.Use the -clear or -clearall option to remove pending breakpoints from the list.
CLRStack [-a] [-l] [-p] [-n]CLRStack [-a] [-l] [-p] [-n] Обеспечивает трассировку стека только для управляемого кода.Provides a stack trace of managed code only.

Параметр -p задает отображение аргументов управляемой функции.The -p option shows arguments to the managed function.

Параметр -l задает отображение сведений о локальных переменных в кадре.The -l option shows information on local variables in a frame. Расширение отладки SOS не позволяет извлекать локальные имена, поэтому выходные данные для локальных имен выводятся в формате <локальный адрес> = <значение>.The SOS Debugging Extension cannot retrieve local names, so the output for local names is in the format <local address> = <value>.

Параметр -a (все) заменяет собой комбинацию параметров -l и -p.The -a(all) option is a shortcut for -l and -p combined.

Параметр -n отключает отображение имен исходных файлов и номеров строк.The -n option disables the display of source file names and line numbers. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладки SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки.If the debugger has the option SYMOPT_LOAD_LINES specified, SOS will look up the symbols for every managed frame and if successful will display the corresponding source file name and line number. Такое поведение можно отключить, задав параметр -n (без номеров строк).The -n (No line numbers) parameter can be specified to disable this behavior.

Расширение отладки SOS не отображает переходные кадры на платформах x64 и IA-64.The SOS Debugging Extension does not display transition frames on x64 and IA-64-based platforms.
COMStateCOMState Выдает список моделей контейнера COM для каждого потока и указатель Context, если он имеется.Lists the COM apartment model for each thread and a Context pointer, if available.
DumpArray [-start <начальный_индекс>] [-length <длина>] [-details] [-nofields] <адрес объекта массива>DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <array object address>

- или --or-

DA [-start <начальный_индекс>] [-length <длина>] [-detail] [-nofields] адрес объекта массива>DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] array object address>
Анализирует элементы объекта массива.Examines elements of an array object.

Параметр -start задает индекс, начиная с которого отображаются элементы.The -start option specifies the starting index at which to display elements.

Параметр -length задает количество отображаемых элементов.The -length option specifies how many elements to show.

Параметр -details задает отображение сведений об элементе в формате DumpObj и DumpVC.The -details option displays details of the element using the DumpObj and DumpVC formats.

Параметр -nofields отменяет отображение массивов.The -nofields option prevents arrays from displaying. Этот параметр можно использовать, только если задан параметр -detail.This option is available only when the -detail option is specified.
DumpAssembly <адрес сборки>DumpAssembly <assembly address> Отображает сведения о сборке.Displays information about an assembly.

Команда DumpAssembly выводит список модулей, если они существуют.The DumpAssembly command lists multiple modules, if they exist.

Адрес сборки можно получить с помощью команды DumpDomain.You can get an assembly address by using the DumpDomain command.
DumpClass <адрес EEClass>DumpClass <EEClass address> Отображает сведения о структуре EEClass, связанной с типом.Displays information about the EEClass structure associated with a type.

Команда DumpClass отображает значения статических полей, но значения нестатических полей не отображаются.The DumpClass command displays static field values but does not display nonstatic field values.

Используйте команду DumpMT, DumpObj, Name2EE или Token2EE, чтобы получить адрес структуры EEClass.Use the DumpMT, DumpObj, Name2EE, or Token2EE command to get an EEClass structure address.
DumpDomain [<адрес домена>]DumpDomain [<domain address>] Перечисляет все объекты Assembly, загруженные по указанному адресу объекта AppDomain.Enumerates each Assembly object that is loaded within the specified AppDomain object address. При вызове без параметров команда DumpDomain выводит список всех объектов AppDomain в составе процесса.When called with no parameters, the DumpDomain command lists all AppDomain objects in a process.
DumpHeap [-stat] [-strings] [-short] [-min <размер>] [-max <размер>] [-thinlock] [-startAtLowerBound] [-mt <адрес MethodTable>] [-type <частичное имя типа>][start [end]]DumpHeap [-stat] [-strings] [-short] [-min <size>] [-max <size>] [-thinlock] [-startAtLowerBound] [-mt <MethodTable address>] [-type <partial type name>][start [end]] Отображает сведения о куче со сборкой мусора и статистику сбора мусора по объектам.Displays information about the garbage-collected heap and collection statistics about objects.

В случае чрезмерной фрагментации кучи сборщика мусора команда DumpHeap выдает соответствующее предупреждение.The DumpHeap command displays a warning if it detects excessive fragmentation in the garbage collector heap.

Параметр -stat ограничивает выводимую информацию статистической сводкой по типам.The -stat option restricts the output to the statistical type summary.

Параметр -strings ограничивает выводимую информацию статистической сводкой по значениям строк.The -strings option restricts the output to a statistical string value summary.

Параметр -short ограничивает вывод только адресом каждого объекта.The -short option limits output to just the address of each object. Благодаря такому подходу можно легко передавать результат из одной команды отладчика в другую команду с целью автоматизации.This lets you easily pipe output from the command to another debugger command for automation.

Параметр -min задает пропуск объектов, размер которых меньше значения параметра size, указанного в байтах.The -min option ignores objects that are less than the size parameter, specified in bytes.

Параметр -max задает пропуск объектов, размер которых больше значения параметра size, указанного в байтах.The -max option ignores objects that are larger than the size parameter, specified in bytes.

Параметр -thinlock сообщает о блокировках ThinLock.The -thinlock option reports ThinLocks. Дополнительные сведения см. в описании команды SyncBlk.For more information, see the SyncBlk command.

Параметр -startAtLowerBound приводит к тому, что обход кучи начинается с нижней границы предоставленного диапазона адресов.The -startAtLowerBound option forces the heap walk to begin at the lower bound of a supplied address range. На стадии планирования куча часто является неанализируемой, поскольку объекты перемещаются.During the planning phase, the heap is often not walkable because objects are being moved. Этот параметр заставляет DumpHeap начать проверку с указанной нижней границы.This option forces DumpHeap to begin its walk at the specified lower bound. Чтобы задействовать этот параметр, необходимо указать адрес допустимого объекта в качестве нижней границы.You must supply the address of a valid object as the lower bound for this option to work. Можно отобразить память по адресу неверного объекта, чтобы вручную найти следующую таблицу методов.You can display memory at the address of a bad object to manually find the next method table. Если сборка мусора выполняется в момент вызова memcopy, также можно найти адрес следующего объекта путем добавления размера к начальному адресу, который указан как параметр.If the garbage collection is currently in a call to memcopy, you may also be able to find the address of the next object by adding the size to the start address, which is supplied as a parameter.

Параметр -mt задает вывод только тех объектов, которые соответствуют указанной структуре MethodTable.The -mt option lists only those objects that correspond to the specified MethodTable structure.

Параметр -type задает вывод только тех объектов, имя типа которых содержит указанную строку.The -type option lists only those objects whose type name is a substring match of the specified string.

Параметр start задает составление списка, начиная с указанного адреса.The start parameter begins listing from the specified address.

Параметр end прекращает составление списка на указанном адресе.The end parameter stops listing at the specified address.
DumpIL <управляемый объект DynamicMethod > | <указатель DynamicMethodDesc > | <указатель MethodDesc>DumpIL <Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer> Отображает язык CIL, связанный с управляемым методом.Displays the Microsoft intermediate language (MSIL) that is associated with a managed method.

Следует иметь в виду, что динамический язык CIL генерируется иначе, чем язык CIL, загруженный из сборки.Note that dynamic MSIL is emitted differently than MSIL that is loaded from an assembly. Динамический язык CIL ссылается на объекты в массиве управляемых объектов, а не на токены метаданных.Dynamic MSIL refers to objects in a managed object array rather than to metadata tokens.
DumpLog [-addr <addressOfStressLog>] [<имя_файлаe>]DumpLog [-addr <addressOfStressLog>] [<Filename>] Записывает в указанный файл содержимое журнала нагрузок, хранящегося в памяти.Writes the contents of an in-memory stress log to the specified file. Если имя не указано, команда создает файл "StressLog.txt" в текущем каталоге.If you do not specify a name, this command creates a file called StressLog.txt in the current directory.

Хранящийся в памяти журнал нагрузок помогает при диагностике сбоев, вызываемых нагрузкой, без использования блокировки или ввода-вывода.The in-memory stress log helps you diagnose stress failures without using locks or I/O. Чтобы разрешить ведение журнала нагрузок, задайте следующие значения в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework.To enable the stress log, set the following registry keys under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework:

(DWORD) StressLog = 1(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536(DWORD) StressLogSize = 65536

С помощью необязательного параметра -addr можно указать журнал нагрузки, отличный от журнала по умолчанию.The optional -addr option lets you specify a stress log other than the default log.
DumpMD <адрес MethodDesc>DumpMD <MethodDesc address> Отображает сведения о структуре MethodDesc, находящейся по указанному адресу.Displays information about a MethodDesc structure at the specified address.

Чтобы получить адрес структуры MethodDesc из управляемой функции, можно использовать команду IP2MD.You can use the IP2MD command to get the MethodDesc structure address from a managed function.
DumpMT [-MD] <адрес MethodTable>DumpMT [-MD] <MethodTable address> Отображает сведения о таблице методов, расположенной по указанному адресу.Displays information about a method table at the specified address. Параметр -MD задает вывод списка всех методов, определенных вместе с объектом.Specifying the -MD option displays a list of all methods defined with the object.

Каждый управляемый объект содержит указатель на таблицу методов.Each managed object contains a method table pointer.
DumpMethodSig <sigaddr> <moduleaddr>DumpMethodSig <sigaddr> <moduleaddr> Отображает сведения о структуре MethodSig, находящейся по указанному адресу.Displays information about a MethodSig structure at the specified address.
DumpModule [-mt] <адрес модуля>DumpModule [-mt] <Module address> Отображает информацию о модуле, находящемся по указанному адресу.Displays information about a module at the specified address. Параметр -mt задает отображение типов, определенных в модуле, и типов, на которые имеются ссылки в модулеThe -mt option displays the types defined in a module and the types referenced by the module

Чтобы получить адрес модуля, можно использовать команду DumpDomain или DumpAssembly.You can use the DumpDomain or DumpAssembly command to retrieve a module's address.
DumpObj [-nofields] <адрес объекта>DumpObj [-nofields] <object address>

- или --or-

DO <адрес объекта>DO <object address>
Отображает сведения об объекте, находящемся по указанному адресу.Displays information about an object at the specified address. Команда DumpObj отображает список полей, сведения о структуре EEClass, таблицу методов и размер объекта.The DumpObj command displays the fields, the EEClass structure information, the method table, and the size of the object.

Чтобы получить адрес объекта, можно использовать команду DumpStackObjects.You can use the DumpStackObjects command to retrieve an object's address.

Следует иметь в виду, что команду DumpObj можно выполнять для полей типа CLASS, поскольку они также являются объектами.Note that you can run the DumpObj command on fields of type CLASS because they are also objects.

Параметр -nofields не предотвращает отображение полей объекта, что удобно для таких объектов, как String.The -nofields option prevents fields of the object being displayed, it is useful for objects like String.
DumpRuntimeTypesDumpRuntimeTypes Отображает объекты типы среды выполнения в куче сборщика мусора и выводит список связанных с ними имен типов и таблиц методов.Displays the runtime type objects in the garbage collector heap and lists their associated type names and method tables.
DumpStack [-EE] [-n] [top stack [bottom stack]]DumpStack [-EE] [-n] [top stack [bottom stack]] Отображает трассировку стека.Displays a stack trace.

Параметр -EE команды DumpStack задает отображение только управляемых функций.The -EE option causes the DumpStack command to display only managed functions. Параметры top и bottom позволяют ограничить состав отображаемых кадров стека на платформах x86.Use the top and bottom parameters to limit the stack frames displayed on x86 platforms.

Параметр -n отключает отображение имен исходных файлов и номеров строк.The -n option disables the display of source file names and line numbers. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладки SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки.If the debugger has the option SYMOPT_LOAD_LINES specified, SOS will look up the symbols for every managed frame and if successful will display the corresponding source file name and line number. Такое поведение можно отключить, задав параметр -n (без номеров строк).The -n (No line numbers) parameter can be specified to disable this behavior.

На платформах x86 и x64 команда DumpStack создает подробную трассировку стека.On x86 and x64 platforms, the DumpStack command creates a verbose stack trace.

На платформах IA-64 команда DumpStack действует аналогично команде отладчика K.On IA-64-based platforms, the DumpStack command mimics the debugger's K command. На платформах IA-64 параметры top и bottom игнорируются.The top and bottom parameters are ignored on IA-64-based platforms.
DumpSig <sigaddr> <moduleaddr>DumpSig <sigaddr> <moduleaddr> Отображает сведения о структуре Sig, находящейся по указанному адресу.Displays information about a Sig structure at the specified address.
DumpSigElem <sigaddr> <moduleaddr>DumpSigElem <sigaddr> <moduleaddr> Отображает единственный элемент объекта сигнатуры.Displays a single element of a signature object. В большинстве случаев следует использовать DumpSig для просмотра отдельных объектов сигнатур.In most cases, you should use DumpSig to look at individual signature objects. Тем не менее, если сигнатура каким-либо образом повреждена, можно использовать DumpSigElem для чтения ее допустимых частей.However, if a signature has been corrupted in some way, you can use DumpSigElem to read the valid portions of it.
DumpStackObjects [-verify] [top stack [bottom stack]]DumpStackObjects [-verify] [top stack [bottom stack]]

- или --or-

DSO [-verify] [top stack [bottom stack]]DSO [-verify] [top stack [bottom stack]]
Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека.Displays all managed objects found within the bounds of the current stack.

Параметр -verify задает проверку каждого нестатического поля CLASS в поле объекта.The -verify option validates each non-static CLASS field of an object field.

Для определения значений локальных переменных и параметров используйте команду DumpStackObject вместе с командами трассировки стека, такими как K и CLRStack.Use the DumpStackObject command with stack tracing commands such as the K command and the CLRStack command to determine the values of local variables and parameters.
DumpVC <адрес MethodTable> <адрес>DumpVC <MethodTable address> <Address> Отображает сведения о полях класса значений, находящегося по указанному адресу.Displays information about the fields of a value class at the specified address.

Параметр MethodTable позволяет команде DumpVC правильно интерпретировать поля.The MethodTable parameter allows the DumpVC command to correctly interpret fields. В классах значений первое поле не содержит таблицу методов.Value classes do not have a method table as their first field.
EEHeap [-gc] [-loader]EEHeap [-gc] [-loader] Отображает сведения о памяти процессов, занимаемой внутренними структурами данных среды CLR.Displays information about process memory consumed by internal CLR data structures.

Параметры -gc и -loader ограничивают выходные данные этой команды только сведениями о структурах данных сборщика мусора и загрузчика.The -gc and -loader options limit the output of this command to garbage collector or loader data structures.

Сведения о сборщике мусора включает в себя диапазоны каждого сегмента в управляемой куче.The information for the garbage collector lists the ranges of each segment in the managed heap. Если указатель попадает в диапазон сегмента, заданный параметром -gc, значит, он является указателем объекта.If the pointer falls within a segment range given by -gc, the pointer is an object pointer.
EEStack [-short] [-EE]EEStack [-short] [-EE] Выполняет команду DumpStack для всех потоков в составе процесса.Runs the DumpStack command on all threads in the process.

Параметр -EE передается непосредственно в команду DumpStack.The -EE option is passed directly to the DumpStack command. Параметр -short ограничивает выходные данные следующими видами потоков.The -short parameter limits the output to the following kinds of threads:

Потоки с блокировкой.Threads that have taken a lock.

Потоки, остановленные для сбора мусора.Threads that have been stalled in order to allow a garbage collection.

Потоки, которые в данный момент находятся в управляемом коде.Threads that are currently in managed code.
EEVersionEEVersion Отображает версию среды CLR.Displays the CLR version.
EHInfo [<адрес MethodDesc>] [<адрес в коде>]EHInfo [<MethodDesc address>] [<Code address>] Отображает блоки обработки исключений в указанном методе.Displays the exception handling blocks in a specified method. Данная команда выводит адреса кода и смещения для блока предложений (блока try) и блока обработчика (блока catch).This command displays the code addresses and offsets for the clause block (the try block) and the handler block (the catch block).
FAQFAQ Отображает вопросы и ответы.Displays frequently asked questions.
FinalizeQueue [-detail] | [-allReady] [-short]FinalizeQueue [-detail] | [-allReady] [-short] Отображает все объекты, зарегистрированные для заключительной обработки.Displays all objects registered for finalization.

Параметр -detail задает вывод дополнительной информации обо всех блоках SyncBlocks, которые необходимо очистить, и оболочках RuntimeCallableWrappers, ожидающих очистки.The -detail option displays extra information about any SyncBlocks that need to be cleaned up, and any RuntimeCallableWrappers (RCWs) that await cleanup. Поток завершения кэширует и очищает обе эти структуры данных.Both of these data structures are cached and cleaned up by the finalizer thread when it runs.

Параметр -allReady отображает все объекты, которые уже готовы к завершению без учета того, помечены они для сборки мусора или будут помечены следующей сборкой мусора.The -allReady option displays all objects that are ready for finalization, regardless of whether they are already marked by the garbage collection as such, or will be marked by the next garbage collection. Объекты, отсутствующие в списке "готовые для завершения", — это завершаемые объекты, которые больше не являются корневым.The objects that are in the "ready for finalization" list are finalizable objects that are no longer rooted. Применение этого параметра может быть очень затратным, поскольку проверяется, все ли объекты в завершаемых очередях по-прежнему являются корневыми.This option can be very expensive, because it verifies whether all the objects in the finalizable queues are still rooted.

Параметр -short ограничивает вывод адресом каждого объекта.The -short option limits the output to the address of each object. При использовании в сочетании с -allReady он перечисляет все объекты с методом завершения, которые больше не являются корневыми.If it is used in conjunction with -allReady, it enumerates all objects that have a finalizer that are no longer rooted. При независимом использовании создает список всех объектов в очередях "поддерживающие завершение" и "готовые для завершения".If it is used independently, it lists all objects in the finalizable and "ready for finalization" queues.
FindAppDomain <адрес объекта>FindAppDomain <Object address> Определяет домен приложения для объекта, находящегося по указанному адресу.Determines the application domain of an object at the specified address.
FindRoots -gen <N> | -gen any |<адрес объекта>FindRoots -gen <N> | -gen any |<object address> Вызывает остановку отладчика в отлаживаемом объекте следующей коллекции заданного поколения.Causes the debugger to break in the debuggee on the next collection of the specified generation. Эффект сбрасывается, как только произойдет останов.The effect is reset as soon as the break occurs. Чтобы остановиться на следующей коллекции, необходимо повторное выполнение команды.To break on the next collection, you have to reissue the command. Форма <адрес объекта> этой команды используется после возникновения останова, вызванного -gen или -gen any.The <object address> form of this command is used after the break caused by the -gen or -gen any has occurred. В этот момент отлаживаемый объект находится в правильном состоянии для FindRoots для идентификации корневых элементов для объектов из поколений, уничтожаемых в данный момент.At that time, the debuggee is in the right state for FindRoots to identify roots for objects from the current condemned generations.
GCHandles [-perdomain]GCHandles [-perdomain] Отображает статистику дескрипторов сборщика мусора в составе процесса.Displays statistics about garbage collector handles in the process.

Параметр -perdomain упорядочивает статистику по доменам приложений.The -perdomain option arranges the statistics by application domain.

Команда GCHandles служит для поиска утечек памяти, вызываемых утечками дескрипторов сборщика мусора.Use the GCHandles command to find memory leaks caused by garbage collector handle leaks. Например, утечка памяти происходит, когда в коде продолжает использоваться большой массив, поскольку на него еще указывает строгий дескриптор сборщика мусора, а сам дескриптор удаляется без освобождения памяти.For example, a memory leak occurs when code retains a large array because a strong garbage collector handle still points to it, and the handle is discarded without freeing it.
GCHandleLeaksGCHandleLeaks Ищет в памяти ссылки на строгие и закрепленные дескрипторы сборщика мусора в рамках процесса и отображает результаты.Searches memory for any references to strong and pinned garbage collector handles in the process and displays the results. При обнаружении дескриптора команда GCHandleLeaks отображает адрес ссылки.If a handle is found, the GCHandleLeaks command displays the address of the reference. Если дескриптор в памяти не найден, выдается уведомление.If a handle is not found in memory, this command displays a notification.
GCInfo <адрес MethodDesc><адрес в коде>GCInfo <MethodDesc address><Code address> Отображает данные, показывающие, содержатся ли управляемые объекты в регистрах или ячейках стека.Displays data that indicates when registers or stack locations contain managed objects. Если производится сбор мусора, сборщик должен знать расположение ссылок на объекты, чтобы их можно было обновить новыми значениями указателей объектов.If a garbage collection occurs, the collector must know the locations of references to objects so it can update them with new object pointer values.
GCRoot [-nostacks] <адрес объекта>GCRoot [-nostacks] <Object address> Отображает информацию о ссылках (или корневых элементах) объекта, находящегося по указанному адресу.Displays information about references (or roots) to an object at the specified address.

Команда GCRoot анализирует всю управляемую кучу и таблицу дескрипторов в поисках дескрипторов, находящихся в других объектах или в стеке.The GCRoot command examines the entire managed heap and the handle table for handles within other objects and handles on the stack. Затем каждый стек просматривается в поисках указателей на объекты; также просматривается и очередь метода завершения.Each stack is then searched for pointers to objects, and the finalizer queue is also searched.

Данная команда не определяет, является ли корень стека допустимым или удален ли он.This command does not determine whether a stack root is valid or is discarded. Используйте команды CLRStack и U, чтобы дизассемблировать кадр, к которому принадлежит локальное значение или значение аргумента, и определить, используется ли еще корень стека.Use the CLRStack and U commands to disassemble the frame that the local or argument value belongs to in order to determine if the stack root is still in use.

Параметр -nostacks ограничивает поиск дескрипторами сборщика мусора и достижимыми объектами.The -nostacks option restricts the search to garbage collector handles and reachable objects.
GCWhere <адрес объекта>GCWhere <object address> Отображает расположение и размер переданного аргумента в куче для сборки мусора.Displays the location and size in the garbage collection heap of the argument passed in. Если аргумент располагается в управляемой куче, но не является адресом допустимого объекта, размер отображается как "0" (нуль).When the argument lies in the managed heap but is not a valid object address, the size is displayed as 0 (zero).
help [<команда>] [faq]help [<command>] [faq] Отображает все доступные команды при отсутствии параметров или, если указана команда, — подробные справочные сведения об этой команде.Displays all available commands when no parameter is specified, or displays detailed help information about the specified command.

Параметр faq задает отображение ответов на часто задаваемые вопросы.The faq parameter displays answers to frequently asked questions.
HeapStat [- inclUnrooted | -iu]HeapStat [-inclUnrooted | -iu] Отображает размеры поколений для каждой кучи и общий объем свободного места в каждом поколении каждой кучи.Displays the generation sizes for each heap and the total free space in each generation on each heap. Если указан параметр -inclUnrooted, отчет содержит сведения об управляемых объектах в куче для сборки мусора, которая больше не является корневой.If the -inclUnrooted option is specified, the report includes information about the managed objects from the garbage collection heap that is no longer rooted.
HistClearHistClear Освобождает все ресурсы, используемые семейством команд Hist.Releases any resources used by the family of Hist commands.

Как правило, прямой вызов HistClear не требуется, так как каждая команда HistInit очищает предыдущие ресурсы.Generally, you do not have to explicitly call HistClear, because each HistInit cleans up the previous resources.
HistInitHistInit Инициализирует структуры SOS из журнала нагрузки, сохраненного в отлаживаемом объекте.Initializes the SOS structures from the stress log saved in the debuggee.
HistObj <адрес_объекта>HistObj <obj_address> Проверяет все записи журнала перемещения нагрузки и отображает цепочку перемещений сборки мусора, которые могли привести к адресу, переданному в качестве аргумента.Examines all stress log relocation records and displays the chain of garbage collection relocations that may have led to the address passed in as an argument.
HistObjFind <адрес_объекта>HistObjFind <obj_address> Отображает все записи журнала, ссылающиеся на объект по указанному адресу.Displays all the log entries that reference an object at the specified address.
HistRoot <корень>HistRoot <root> Отображает сведения о повышениях и перемещениях указанного корневого элемента.Displays information related to both promotions and relocations of the specified root.

Корневое значение можно использовать для отслеживания движения объекта в сборках мусора.The root value can be used to track the movement of an object through the garbage collections.
IP2MD <адрес в коде>IP2MD <Code address> Отображает структуру MethodDesc по указанному адресу в коде после его JIT-компиляции.Displays the MethodDesc structure at the specified address in code that has been JIT-compiled.
ListNearObj (lno) <адрес_объекта>ListNearObj (lno) <obj_address> Отображает объекты перед указанным адресом и после него.Displays the objects preceding and following the specified address. Команда находит в куче для сборки мусора адрес, напоминающий допустимое начало управляемого объекта (в зависимости от таблицы допустимых методов), и объект, следующий за адресом аргумента.The command looks for the address in the garbage collection heap that looks like a valid beginning of a managed object (based on a valid method table) and the object following the argument address.
MinidumpMode [0] [1]MinidumpMode [0] [1] Запрещает выполнение небезопасных команд при использовании минидампа.Prevents running unsafe commands when using a minidump.

Значение 0 отключает этот режим, а значение 1 включает его.Pass 0 to disable this feature or 1 to enable this feature. По умолчанию значение MinidumpMode равно 0.By default, the MinidumpMode value is set to 0.

Минидампы, созданные с помощью команды .dump /m или .dump, содержат ограниченный набор данных, связанных с CLR, и позволяют корректно выполнять лишь часть команд SOS.Minidumps created with the .dump /m command or .dump command have limited CLR-specific data and allow you to run only a subset of SOS commands correctly. Выполнение некоторых команд может завершаться сбоем из-за непредвиденных ошибок, вызываемых тем, что требуемые области памяти не сопоставлены или сопоставлены лишь частично.Some commands may fail with unexpected errors because required areas of memory are not mapped or are only partially mapped. Данный параметр блокирует запуск небезопасных команд для минидампов.This option protects you from running unsafe commands against minidumps.
Name2EE <имя модуля> <имя типа или метода>Name2EE <module name> <type or method name>

- или --or-

Name2EE <имя модуля>!<имя типа или метода>Name2EE <module name>!<type or method name>
Отображает структуры MethodTable и EEClass для указанного типа или метода в указанном модуле.Displays the MethodTable structure and EEClass structure for the specified type or method in the specified module.

Указанный модуль должен быть загружен в процесс.The specified module must be loaded in the process.

Чтобы получить правильное имя типа, просмотрите модуль с помощью Ildasm.exe (дизассемблера IL).To get the proper type name, browse the module by using the Ildasm.exe (IL Disassembler). Можно также передать * в качестве параметра имени модуля, чтобы просматривались все загруженные управляемые модули.You can also pass * as the module name parameter to search all loaded managed modules. Параметр имя модуля может также содержать имя отладчика для модуля, например mscorlib или image00400000.The module name parameter can also be the debugger's name for a module, such as mscorlib or image00400000.

Данная команда поддерживает следующий синтаксис отладчика Windows: <module>!<type>.This command supports the Windows debugger syntax of <module>!<type>. Имя типа должно быть полным.The type must be fully qualified.
ObjSize [<адрес объекта>] | [-aggregate] [-stat]ObjSize [<Object address>] | [-aggregate] [-stat] Отображает размер указанного объекта.Displays the size of the specified object. Если параметры не указаны, команда ObjSize отображает размеры всех объектов, найденных в управляемых потоках, все дескрипторы сборщика мусора в данном процессе, а также общий размер всех объектов, указываемых этими дескрипторами.If you do not specify any parameters, the ObjSize command displays the size of all objects found on managed threads, displays all garbage collector handles in the process, and totals the size of any objects pointed to by those handles. Команда ObjSize включает в размер каждого родительского объекта размер всех его дочерних объектов.The ObjSize command includes the size of all child objects in addition to the parent.

Параметр -aggregate можно использовать в сочетании с аргументом -stat, чтобы получить подробное представление типов, которые по-прежнему являются корневыми.The -aggregate option can be used in conjunction with the -stat argument to get a detailed view of the types that are still rooted. С помощью !dumpheap -stat и !objsize -aggregate -stat можно определить, какие объекты больше не являются корневыми, и провести диагностику различных проблем с памятью.By using !dumpheap -stat and !objsize -aggregate -stat, you can determine which objects are no longer rooted and diagnose various memory issues.
PrintException [-nested] [-lines] [<адрес объекта исключения>]PrintException [-nested] [-lines] [<Exception object address>]

- или --or-

PE [-nested] [<адрес объекта исключения>]PE [-nested] [<Exception object address>]
Отображает и форматирует поля всех производных объектов класса Exception, находящегося по указанному адресу.Displays and formats fields of any object derived from the Exception class at the specified address. Если адрес не задан, команда PrintException отображает последнее исключение, возникшее в текущем потоке.If you do not specify an address, the PrintException command displays the last exception thrown on the current thread.

Параметр -nested задает отображение сведений о вложенных объектах исключений.The -nested option displays details about nested exception objects.

Если доступен, параметр -lines отображает сведения об источнике.The -lines option displays source information, if available.

С помощью этой команды можно форматировать и просматривать поле _stackTrace, представляющее собой двоичный массив.You can use this command to format and view the _stackTrace field, which is a binary array.
ProcInfo [-env] [-time] [-mem]ProcInfo [-env] [-time] [-mem] Отображает переменные среды для статистики процесса, процессорного времени ядра и использования памяти.Displays environment variables for the process, kernel CPU time, and memory usage statistics.
RCWCleanupList <адрес RCWCleanupList>RCWCleanupList <RCWCleanupList address> Отображает список вызываемых оболочек среды выполнения по указанному адресу, ожидающих очистки.Displays the list of runtime callable wrappers at the specified address that are awaiting cleanup.
SaveModule <базовый адрес> <имя_файла>SaveModule <Base address> <Filename> Записывает в указанный файл образ, загруженный в память по указанному адресу.Writes an image, which is loaded in memory at the specified address, to the specified file.
SOSFlushSOSFlush Очищает внутренний кэш SOS.Flushes an internal SOS cache.
StopOnException [-derived] [-create | -create2] <исключение> <псевдорегистр>StopOnException [-derived] [-create | -create2] <Exception> <Pseudo-register number> Предписывает отладчику остановиться при возникновении указанного исключения и продолжать работу при возникновении других исключений.Causes the debugger to stop when the specified exception is thrown, but to continue running when other exceptions are thrown.

Параметр -derived задает перехват указанного исключения и всех производных от него исключений.The -derived option catches the specified exception and every exception that derives from the specified exception.
SyncBlk [-all | <номер syncblk>]SyncBlk [-all | <syncblk number>] Отображает указанную структуру SyncBlock или все структуры SyncBlock.Displays the specified SyncBlock structure or all SyncBlock structures. При отсутствии аргументов команда SyncBlk отображает структуру SyncBlock, соответствующую объектам, владельцем которых является поток.If you do not pass any arguments, the SyncBlk command displays the SyncBlock structure corresponding to objects that are owned by a thread.

Структура SyncBlock представляет собой контейнер для дополнительной информации, которую необязательно создавать для каждого объекта.A SyncBlock structure is a container for extra information that does not need to be created for every object. Она может включать данные COM-взаимодействия и сведения о блокировке для потокобезопасных операций.It can hold COM interop data, hash codes, and locking information for thread-safe operations.
ThreadPoolThreadPool Отображает сведения о пуле управляемых потоков, включая число рабочих запросов в очереди, число потоков портов завершения и число таймеров.Displays information about the managed thread pool, including the number of work requests in the queue, the number of completion port threads, and the number of timers.
Token2EE <имя модуля> <токен>Token2EE <module name> <token> Преобразует указанный токен метаданных указанного модуля в структуру MethodTable или MethodDesc.Turns the specified metadata token in the specified module into a MethodTable structure or MethodDesc structure.

В качестве параметра имени модуля можно указать *, чтобы узнать, с чем сопоставляется токен в каждом из загруженных управляемых модулей.You can pass * for the module name parameter to find what that token maps to in every loaded managed module. Можно также задать имя отладчика для модуля, например mscorlib или image00400000.You can also pass the debugger's name for a module, such as mscorlib or image00400000.
Threads [-live] [-special]Threads [-live] [-special] Отображает все управляемые потоки в процессе.Displays all managed threads in the process.

Команда Threads отображает сокращенный идентификатор отладчика, идентификатор потока среды CLR и идентификатор потока операционной системы.The Threads command displays the debugger shorthand ID, the CLR thread ID, and the operating system thread ID. Кроме того, команда Threads отображает столбец Domain, содержащий домен приложения, в котором выполняется поток, столбец APT, в котором показан режим COM-контейнера, и столбец Exception, где указано последнее исключение, возникшее в потоке.Additionally, the Threads command displays a Domain column that indicates the application domain in which a thread is executing, an APT column that displays the COM apartment mode, and an Exception column that displays the last exception thrown in the thread.

Параметр -live задает отображение потоков, связанных с активным потоком.The -live option displays threads associated with a live thread.

Параметр -special задает отображение всех специальных потоков, созданных средой CLR.The -special option displays all special threads created by the CLR. К специальным потокам относятся потоки сборки мусора (для параллельной сборки мусора и серверной сборки мусора), вспомогательные потоки отладчика, потоки метода завершения, потоки выгрузки AppDomain и потоки таймера пула потоков.Special threads include garbage collection threads (in concurrent and server garbage collection), debugger helper threads, finalizer threads, AppDomain unload threads, and thread pool timer threads.
ThreadState < значение поля состояния >ThreadState < State value field > Отображает состояние потока.Displays the state of the thread. Параметр value представляет собой значение поля State в выводе отчета Потоки.The value parameter is the value of the State field in the Threads report output.

ПримерExample:

0:003> !Threads ThreadCount: 2 UnstartedThread: 0 BackgroundThread: 1 PendingThread: 0 DeadThread: 0 Hosted Runtime: no PreEmptive GC Alloc Lock ID OSID ThreadOBJ State GC Context Domain Count APT Exception 0 1 250 0019b068 a020 Disabled 02349668:02349fe8 0015def0 0 MTA 2 2 944 001a6020 b220 Enabled 00000000:00000000 0015def0 0 MTA (Finalizer) 0:003> !ThreadState b220 Legal to Join Background CLR Owns CoInitialized In Multi Threaded Apartment
TraverseHeap [-xml] <имя_файла>TraverseHeap [-xml] <filename> Записывает данные кучи в указанный файл в формате, распознаваемом профилировщиком CLR.Writes heap information to the specified file in a format understood by the CLR profiler. Параметр -xml предписывает команде TraverseHeap преобразовать файл в формат XML.The -xml option causes the TraverseHeap command to format the file as XML.

Профилировщик CLR можно скачать в центре загрузки Майкрософт.You can download the CLR Profiler from the Microsoft Download Center.
U [-gcinfo] [-ehinfo] [-n] <адрес MethodDesc> | <адрес в коде>U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> | <Code address> Отображает дизассемблированный код с примечаниями для управляемого метода, заданного указателем структуры MethodDesc или адресом кода в теле метода.Displays an annotated disassembly of a managed method specified either by a MethodDesc structure pointer for the method or by a code address within the method body. Команда U отображает весь метод от начала до конца, с примечаниями, преобразующими токены метаданных в имена.The U command displays the entire method from start to finish, with annotations that convert metadata tokens to names.

Параметр -gcinfo предписывает команде U отобразить структуру GCInfo метода.The -gcinfo option causes the U command to display the GCInfo structure for the method.

Параметр -ehinfo задает отображение сведений об исключениях в методе.The -ehinfo option displays exception information for the method. Эту информацию можно также получить с помощью команды EHInfo.You can also obtain this information with the EHInfo command.

Параметр -n отключает отображение имен исходных файлов и номеров строк.The -n option disables the display of source file names and line numbers. Если для отладчика указан параметр "SYMOPT_LOAD_LINES", расширение отладчика SOS ищет символы для каждого управляемого кадра и в случае успеха отображает соответствующее имя исходного файла и номер строки.If the debugger has the option SYMOPT_LOAD_LINES specified, SOS looks up the symbols for every managed frame and, if successful, displays the corresponding source file name and line number. Чтобы отключить это поведение, можно указать параметр -n.You can specify the -n option to disable this behavior.
VerifyHeapVerifyHeap Проверяет кучу сборщика мусора на наличие признаков повреждения и отображает обнаруженные ошибки.Checks the garbage collector heap for signs of corruption and displays any errors found.

Повреждения кучи могут быть вызваны неправильно созданными вызовами неуправляемого кода.Heap corruptions can be caused by platform invoke calls that are constructed incorrectly.
VerifyObj <адрес объекта>VerifyObj <object address> Проверяет объект, передаваемый в качестве аргумента, на наличие повреждений.Checks the object that is passed as an argument for signs of corruption.
VMMapVMMap Выполняет обход виртуального адресного пространства и отображает тип защиты для каждого региона.Traverses the virtual address space and displays the type of protection applied to each region.
VMStatVMStat Создает сводное представление виртуального адресного пространства, упорядоченное по типам защиты соответствующих видов памяти (свободная, зарезервированная, выделенная, закрытая, отображаемая, образ).Provides a summary view of the virtual address space, ordered by each type of protection applied to that memory (free, reserved, committed, private, mapped, image). В столбце "TOTAL" содержится результат умножения значения в столбце "AVERAGE" на значение в столбце "BLK COUNT".The TOTAL column displays the result of the AVERAGE column multiplied by the BLK COUNT column.

ПримечанияRemarks

Расширение отладки SOS позволяет просматривать сведения о коде, выполняемом в среде CLR.The SOS Debugging Extension lets you view information about code that is running inside the CLR. Например, с помощью расширения отладки SOS можно получать сведения об управляемой куче, искать повреждения кучи, отображать внутренние типы данных, используемые средой выполнения, и просматривать информацию о любом управляемом коде, запущенном в среде выполнения.For example, you can use the SOS Debugging Extension to display information about the managed heap, look for heap corruptions, display internal data types used by the runtime, and view information about all managed code running inside the runtime.

Для работы с расширением отладчика SOS в Visual Studio установите Комплект разработки драйверов для Windows (WDK).To use the SOS Debugging Extension in Visual Studio, install the Windows Driver Kit (WDK). Дополнительные сведения об интегрированной среде отладки в Visual Studio см. в статье Debugging Environments (Среды отладки).For information about the integrated debugging environment in Visual Studio, see Debugging Environments.

Расширение отладки SOS можно также загрузить в отладчик WinDbg.exe и выполнять команды в этом отладчике.You can also use the SOS Debugging Extension by loading it into the WinDbg.exe debugger and executing commands within WinDbg.exe.

Чтобы загрузить расширение отладки SOS в отладчик WinDbg.exe, выполните в программе следующую команду.To load the SOS Debugging Extension into the WinDbg.exe debugger, run the following command in the tool:

.loadby sos clr

Отладчик WinDbg.exe и Visual Studio используют версию библиотеки "SOS.dll", которая соответствует текущей версии "Mscorwks.dll".WinDbg.exe and Visual Studio use a version of SOS.dll that corresponds to the version of Mscorwks.dll currently in use. По умолчанию следует использовать версию библиотеки "SOS.dll", которая соответствует текущей версии "Mscorwks.dll".By default, you should use the version of SOS.dll that matches the current version of Mscorwks.dll.

Чтобы использовать файл дампа, созданный на другом компьютере, убедитесь, что файл "Mscorwks.dll", поступивший вместе с этой установленной копией, указан в пути к символам в данной системе, и загрузите соответствующую версию библиотеки "SOS.dll".To use a dump file created on another computer, make sure that the Mscorwks.dll file that came with that installation is in your symbol path, and load the corresponding version of SOS.dll.

Чтобы загрузить определенную версию библиотеки "SOS.dll", введите в окне отладчика Windows следующую команду.To load a specific version of SOS.dll, type the following command into the Windows Debugger:

.load <full path to sos.dll>

ПримерыExamples

Следующая команда отображает содержимое массива по адресу 00ad28d0.The following command displays the contents of an array at the address 00ad28d0. Отображаются данные для пяти элементов массива, начиная со второго.The display starts from the second element and continues for five elements.

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

Следующая команда отображает содержимое сборки по адресу 1ca248.The following command displays the contents of an assembly at the address 1ca248.

!dumpassembly 1ca248

Следующая команда отображает сведения о куче сборщика мусора.The following command displays information about the garbage collector heap.

!dumpheap

Следующая команда записывает содержимое журнала нагрузок в памяти в файл "StressLog.txt" (по умолчанию), расположенный в текущем каталоге.The following command writes the contents of the in-memory stress log to a (default) file called StressLog.txt in the current directory.

!DumpLog

Следующая команда отображает структуру MethodDesc по адресу 902f40.The following command displays the MethodDesc structure at the address 902f40.

!dumpmd 902f40

Следующая команда отображает сведения о модуле по адресу 1caa50.The following command displays information about a module at the address 1caa50.

!dumpmodule 1caa50

Следующая команда отображает сведения об объекте по адресу a79d40.The following command displays information about an object at the address a79d40.

!DumpObj a79d40

Следующая команда отображает поля класса значений по адресу 00a79d9c, используя таблицу методов по адресу 0090320c.The following command displays the fields of a value class at the address 00a79d9c using the method table at the address 0090320c.

!DumpVC 0090320c 00a79d9c

Следующая команда отображает память процесса, используемую сборщиком мусора.The following command displays the process memory used by the garbage collector.

!eeheap -gc

Следующая команда отображает все объекты, запланированные для заключительной обработки.The following command displays all objects scheduled for finalization.

!finalizequeue

Следующая команда находит домен приложения для объекта по адресу 00a79d98.The following command determines the application domain of an object at the address 00a79d98.

!findappdomain 00a79d98

Следующая команда отображает все дескрипторы сборщика мусора в текущем процессе.The following command displays all garbage collector handles in the current process.

!gcinfo 5b68dbb8

Следующая команда отображает структуры MethodTable и EEClass для метода Main класса MainClass в модуле unittest.exe.The following command displays the MethodTable and EEClass structures for the Main method in the class MainClass in the module unittest.exe.

!name2ee unittest.exe MainClass.Main

Следующая команда отображает сведения о токене метаданных по адресу 02000003 в модуле unittest.exe.The following command displays information about the metadata token at the address 02000003 in the module unittest.exe.

!token2ee unittest.exe 02000003

См. такжеSee also