Compartir a través de


Extensión de depuración de SOS (SOS.dll)

La extensión de depuración de SOS (SOS.dll) ayuda a depurar programas administrados en el depurador WinDbg.exe y en Visual Studio al proporcionar información acerca del entorno interno de Common Language Runtime (CLR).

![command] [options] 

Comandos

Comando Descripción

BPMD [<module name> <method name>] [-md <MethodDesc>]

Crea un punto de interrupción en el método especificado en el módulo especificado.

Si no se han cargado el módulo y el método especificados, antes de crear un punto de interrupción, este comando espera una notificación de que el módulo se cargó y se compiló Just-In-Time.

CLRStack [-a] [-l] [-p]

Proporciona un seguimiento de pila solamente del código administrado.

La opción -p muestra los argumentos para la función administrada.

La opción -l muestra información acerca de las variables locales en un marco. La extensión de depuración de SOS no puede recuperar nombres locales, por lo que el resultado para los nombres locales está en el formato <local address> = <value>.

La opción -a (all en inglés) es un acceso directo para -l y -p combinados.

La extensión de depuración de SOS no muestra marcos de transición en plataformas basadas en IA-64 y x64.

COMState

Muestra el modelo de apartamento de COM para cada subproceso y un puntero Context, si está disponible.

DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <array object address>

O bien,

DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] array object address>

Examina los elementos de un objeto de matriz.

La opción -start especifica el índice de inicio en el que se muestran los elementos.

La opción -length especifica cuántos elementos se van a mostrar.

La opción -detail muestra detalles del elemento en los formatos DumpObj y DumpVC.

La opción -nofields evita que se muestren las matrices. Esta opción sólo está disponible cuando se especifica la opción -detail.

DumpAssembly <Assembly address>

Muestra información acerca de un ensamblado.

El comando DumpAssembly muestra varios módulos, si existen.

Se puede obtener una dirección de ensamblado mediante el comando DumpDomain.

DumpClass <EEClass address>

Muestra información acerca de la estructura EEClass asociada a un tipo.

El comando DumpClass muestra los valores de campo estático, pero no muestra los valores de campo no estático.

Utilice los comandos DumpMT, DumpObj, Name2EE o Token2EE para obtener una dirección de estructura EEClass.

DumpDomain [<Domain address>]

Enumera cada objeto Assembly cargado en la dirección del objeto AppDomain que se ha especificado. Cuando se llama sin parámetros, el comando DumpDomain muestra todos los objetos AppDomain de un proceso.

DumpHeap [-stat] [-min <size>][-max <size>] [-thinlock] [-mt <MethodTable address>] [-type <partial type name>][start [end]]

Muestra información acerca del montón del recolector de elementos no utilizados y las estadísticas de recolección de objetos.

El comando DumpHeap muestra una advertencia si detecta una fragmentación excesiva en el montón del recolector de elementos no utilizados.

La opción -stat restringe el resultado al resumen de tipo estadístico.

La opción -min omite los objetos cuyo tamaño es inferior al valor del parámetro size, especificado en bytes.

La opción -max omite los objetos cuyo tamaño es superior al valor del parámetro size, especificado en bytes.

La opción -thinlock genera un informe de ThinLocks. Para obtener más información, vea el comando SyncBlk.

La opción -mt muestra sólo los objetos que corresponden a la estructura MethodTable especificada.

La opción -type muestra sólo los objetos cuyo nombre de tipo es una coincidencia de subcadena de la cadena especificada.

El parámetro start indica que la lista comience en la dirección especificada.

El parámetro end indica que la lista se detenga en la dirección especificada.

DumpIL [<DynamicMethod address>] [<DynamicMethodDesc address>] [<MethodDesc address>]

Muestra el lenguaje intermedio (IL) asociado a un método administrado.

Observe que el IL dinámico se emite de manera diferente que el IL cargado desde un ensamblado. El IL dinámico hace referencia a objetos de una matriz de objetos administrada en lugar de a símbolos (tokens) de metadatos.

DumpLog [<Filename>]

Escribe el contenido de un registro de carga en memoria en el archivo especificado. Si no se especifica un nombre, este comando crea un archivo denominado Stresslog.txt en el directorio actual.

Common Language Runtime proporciona un registro de carga en memoria que ayuda a diagnosticar errores de carga. El registro permite diagnosticar errores sin utilizar bloqueos o E/S. Para habilitar el registro de carga, establezca las siguientes claves del Registro bajo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

DumpMD <MethodDesc address>

Muestra información acerca de una estructura MethodDesc en la dirección especificada.

Puede utilizar el comando IP2MD para obtener la dirección de la estructura MethodDesc de una función administrada.

DumpMT [-MD] <MethodTable address>

Muestra información acerca de una tabla de métodos en la dirección especificada. Al especificar la opción -MD, se muestra una lista de todos los métodos definidos con el objeto.

Cada objeto administrado contiene un puntero a tabla de métodos.

DumpMethodSig <sigaddr> <moduleaddr>

Muestra información acerca de una estructura MethodSig en la dirección especificada.

DumpModule [-mt] <Module address>

Muestra información acerca de un módulo en la dirección especificada. La opción -mt muestra los tipos definidos en un módulo y los tipos a los que el módulo hace referencia.

Puede utilizar el comando DumpDomain o DumpAssembly para recuperar la dirección de un módulo.

DumpObj <object address>

O bien,

DO <object address>

Muestra información acerca de un objeto en la dirección especificada. El comando DumpObj muestra los campos, la información de la estructura EEClass, la tabla de métodos y el tamaño del objeto.

Puede utilizar el comando DumpStackObjects para recuperar la dirección de un objeto.

Observe que puede ejecutar el comando DumpObj en campos de tipo CLASS, porque también son objetos.

DumpRuntimeTypes

Muestra los objetos de tipos en tiempo de ejecución en el montón del recolector de elementos no utilizados y muestra las tablas de métodos y los nombres de tipos asociados.

DumpStack [-EE] [top stack [bottom stack]]

Muestra un seguimiento de pila.

La opción -EE hace que el comando DumpStack muestre sólo las funciones administradas. Utilice los parámetros top y bottom para limitar los marcos de pila mostrados en plataformas x86.

En las plataformas x86, el comando DumpStack crea un seguimiento de pila detallado.

En las plataformas basadas en IA-64 y x64, el comando DumpStack imita el comportamiento del comando K del depurador. Los parámetros top y bottom no se tienen en cuenta en las plataformas basadas en IA-64 y x64.

DumpSig <sigaddr> <moduleaddr>

Muestra información acerca de una estructura Sig en la dirección especificada.

DumpStackObjects [-verify] [top stack [bottom stack]]

O bien,

DSO [-verify] [top stack [bottom stack]]

Muestra todos los objetos administrados encontrados dentro de los límites de la pila actual.

La opción -verify valida cada campo CLASS no estático de un campo de objeto.

Utilice el comando DumpStackObject con comandos de seguimiento de pila como el comando K y el comando CLRStack para determinar los valores de parámetros y variables locales.

DumpVC <MethodTable address> <Address>

Muestra información acerca de los campos de una clase de valor en la dirección especificada.

El parámetro MethodTable permite que el comando DumpVC interprete los campos correctamente. Las clases de valor no tienen una tabla de métodos como primer campo.

EEHeap [-gc] [-loader]

Muestra información acerca de la memoria de proceso utilizada por las estructuras de datos internas de Common Language Runtime.

Las opciones -gc y -loader limitan el resultado de este comando a las estructuras de datos del recolector de elementos no utilizados o del cargador.

La información para el recolector de elementos no utilizados muestra los intervalos de cada segmento en el montón administrado. Si el puntero pertenece a un intervalo de segmento proporcionado por EEHeap -gc, es un puntero de objeto.

EEStack [-short] [-EE]

Ejecuta el comando DumpStack en todos los subprocesos del proceso.

La opción -EE se pasa directamente al comando DumpStack. El parámetro -short limita el resultado a los siguientes tipos de subprocesos:

  1. Subprocesos que han tomado un bloqueo.

  2. Subprocesos que han sido detenidos para permitir una recolección de elementos no utilizados.

  3. Subprocesos que están actualmente en el código administrado.

EEVersion

Muestra la versión de Common Language Runtime.

EHInfo [<MethodDesc address>] [<Code address>]

Muestra los bloques de control de excepciones en un método especificado. Este comando muestra los desplazamientos y las direcciones de código para el bloque de cláusulas (el bloque Try) y el bloque de controladores (el bloque Catch).

FinalizeQueue [-detail]

Muestra todos los objetos registrados para su finalización.

La opción -detail muestra información adicional acerca de los SyncBlocks en espera de limpieza, así como información adicional acerca de los RuntimeCallableWrappers (RCW) en espera de limpieza. El subproceso finalizador almacena en memoria caché y limpia ambas estructuras de datos.

FindAppDomain <Object address>

Determina el dominio de aplicación de un objeto en la dirección especificada.

GCHandles [-perdomain]

Muestra estadísticas acerca de los identificadores del recolector de elementos no utilizados del proceso.

Al pasar la opción -perdomain, las estadísticas se organizan por dominio de aplicación.

Utilice el comando GCHandles para encontrar pérdidas de memoria producidas por pérdidas de identificadores del recolector de elementos no utilizados. Una pérdida de memoria se produce, por ejemplo, cuando el código retiene una matriz grande porque un identificador seguro del recolector de elementos no utilizados todavía señala a la misma y el identificador se descarta sin liberarla.

GCHandleLeaks

Busca en memoria cualquier referencia a identificadores seguros y fijos del recolector de elementos no utilizados en el proceso y muestra los resultados. Si se encuentra un identificador, el comando GCHandleLeaks muestra la dirección de la referencia. Si no se encuentra un identificador en memoria, este comando muestra una notificación.

GCInfo <MethodDesc address> <Code address>

Muestra datos que indican cuándo los registros o las ubicaciones de la pila contienen objetos administrados. Si se produce una recolección de elementos no utilizados, el recolector debe conocer las ubicaciones de las referencias a los objetos para poder actualizarlas con los nuevos valores de puntero de objeto.

GCRoot [-nostacks] <Object address>

Muestra información acerca de las referencias (o raíces) a un objeto en la dirección especificada.

El comando GCRoot busca identificadores dentro de otros objetos e identificadores en la pila en todo el montón administrado y en la tabla de identificadores. Después, se buscan punteros a objetos en cada pila, y también se busca en la cola del finalizador.

Este comando no determina si una raíz de la pila es válida o se descarta. Utilice los comandos CLRStack y U para desensamblar el marco al que pertenece el valor de argumento o local para determinar si la raíz de la pila todavía está en uso.

La opción -nostacks restringe la búsqueda a objetos alcanzables y a identificadores del recolector de elementos no utilizados.

help [<command>] [<faq>]

Cuando no se especifica ningún parámetro, muestra todos los comandos disponibles; o bien, muestra ayuda detallada acerca del comando especificado.

El parámetro faq muestra respuestas a preguntas más frecuentes.

IP2MD <Code address>

Muestra la estructura MethodDesc en la dirección especificada en código compilado Just-In-Time (JIT).

MinidumpMode [0] [1]

Evita que se ejecuten comandos no seguros al utilizar un minivolcado.

Pase 0 para deshabilitar esta característica o 1 para habilitarla. De manera predeterminada, el valor de MinidumpMode se encuentra establecido en 0.

Los minivolcados creados con el comando .dump /m o .dump tienen datos específicos de CLR limitados y permiten ejecutar sólo un subconjunto de comandos de SOS correctamente. Se pueden producir errores inesperados en algunos comandos porque no se hayan asignado o sólo se hayan asignado parcialmente áreas memoria necesarias. Esta opción evita que ejecute comandos no seguros en minivolcados.

Name2EE <module name> <type or method name>

O bien,

Name2EE <module name>!<type or method name>

Muestra la estructura MethodTable y la estructura EEClass para el tipo o método especificado en el módulo especificado.

El módulo especificado se debe cargar en el proceso.

Para obtener el nombre de tipo correcto, examine el módulo mediante el Desensamblador de MSIL (Ildasm.exe). También puede pasar * como parámetro module name para buscar en todos los módulos administrados cargados. El parámetro module name también puede ser el nombre del depurador para un módulo, como mscorlib o image00400000.

Este comando admite la sintaxis del depurador de Windows <module>!<type>. El nombre del tipo debe ser completo.

ObjSize [<Object address>]

Muestra el tamaño del objeto especificado. Sin parámetros, el comando ObjSize muestra el tamaño de todos los objetos encontrados en subprocesos administrados, muestra todos los identificadores del recolector de elementos no utilizados en el proceso y suma el tamaño de todos los objetos a los que señalan esos identificadores. El comando ObjSize incluye el tamaño de todos los objetos secundarios y del objeto primario.

PrintException [-nested] [<Exception object address>]

O bien,

PE [-nested] [<Exception object address>]

Muestra y da formato a los campos de cualquier objeto derivado de la clase Exception en la dirección especificada. Si no se especifica una dirección, el comando PrintException muestra la última excepción iniciada en el subproceso actual.

La opción -nested muestra detalles acerca de los objetos de excepción anidados.

Puede utilizar este comando para dar formato y ver el campo _stackTrace, que es una matriz binaria.

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

Muestra las variables de entorno del proceso, el tiempo de CPU del núcleo y estadísticas de utilización de memoria.

RCWCleanupList <RCWCleanupList address>

Muestra la lista de contenedores a los que se llama en tiempo de ejecución que se encuentran en la dirección especificada y que están en espera de limpieza.

SaveModule <Base address> <Filename>

Escribe en el archivo especificado una imagen que está cargada en memoria en la dirección especificada.

StopOnException [-derived] [-create | -create2] <Exception> <Pseudo-register number>

Hace que el depurador se detenga si se inicia la excepción especificada, pero sigue ejecutándose si se inician otras excepciones.

La opción -derived detecta la excepción especificada y cada excepción que se derive de la misma.

SyncBlk [-all | <syncblk number>]

Muestra la estructura SyncBlock especificada o todas las estructuras SyncBlock. Si no se pasa ningún argumento, el comando SyncBlk muestra la estructura SyncBlock que corresponde a los objetos que pertenecen a un subproceso.

Una estructura SyncBlock es un contenedor de información adicional que no es necesario crear para cada objeto. Puede contener datos de interoperabilidad COM, códigos hash e información de bloqueo de operaciones seguras para subprocesos.

ThreadPool

Muestra información acerca del grupo de subprocesos administrado, como el número de solicitudes de trabajo en la cola, el número de subprocesos de puerto de finalización y el número de temporizadores.

Token2EE <module name> <token>

Convierte el símbolo (token) de metadatos especificado en el módulo especificado en una estructura MethodTable o MethodDesc.

Puede pasar * para el parámetro module name a fin de averiguar a qué está asignado ese símbolo (token) en cada módulo administrado cargado. También puede pasar el nombre del depurador para un módulo, como mscorlib o image00400000.

Threads [-live] [-special]

Muestra todos los subprocesos administrados del proceso.

El comando Threads muestra el identificador abreviado del depurador, el identificador de subproceso de Common Language Runtime y el identificador de subproceso del sistema operativo. Además, el comando Threads muestra una columna Domain que indica el dominio de aplicación en el que se ejecuta un subproceso, una columna APT que muestra el modo de apartamento de COM y una columna Exception que muestra la última excepción iniciada en el subproceso.

La opción -live muestra los subprocesos asociados a un subproceso activo.

La opción -special muestra todos los subprocesos especiales creados por CLR. Entre los subprocesos especiales se incluyen los subprocesos de recolección de elementos no utilizados (GC) (en GC simultánea y GC del servidor), subprocesos auxiliares del depurador, subprocesos finalizadores, subprocesos de descarga de AppDomain y subprocesos Timer de Threadpool.

TraverseHeap [-xml] <filename>

Escribe información del montón en el archivo especificado, en un formato reconocido por el generador de perfiles de CLR. La opción -xml hace que el comando TraverseHeap dé formato al archivo como XML.

Puede descargar el generador de perfiles de CLR desde: https://www.microsoft.com/downloads/details.aspx?familyid=86CE6052-D7F4-4AEB-9B7A-94635BEEBDDA

U [-gcinfo] [-ehinfo] <MethodDesc address> | <Code address>

Muestra un desensamblado anotado de un método administrado especificado mediante un puntero a la estructura MethodDesc para el método o mediante una dirección de código dentro del cuerpo del método. El comando U muestra todo el método de principio a fin, con las anotaciones que convierten los símbolos (tokens) de metadatos en nombres.

La opción -gcinfo hace que el comando U muestre la estructura GCInfo para el método.

La opción -ehinfo muestra información de excepción para el método. Esta información también se obtiene con el comando EHInfo.

VerifyHeap

Comprueba el montón del recolector de elementos no utilizados en busca de indicios de daño, y muestra los errores encontrados.

Los daños del montón pueden ser debidos a llamadas de invocación de plataforma construidas incorrectamente.

VMMap

Recorre el espacio de direcciones virtuales y muestra el tipo de protección aplicado a cada área.

VMStat

Proporciona una vista resumida del espacio de direcciones virtuales, ordenada según el tipo de protección que se ha aplicado a esa memoria (libre, reservado, confirmado, privado, asignado, imagen). La columna TOTAL muestra el resultado de multiplicar la columna AVERAGE por la columna BLK COUNT.

Comentarios

Para utilizar la extensión de depuración de SOS, cárguela en el depurador WinDbg.exe o en Visual Studio 2005 o una versión anterior. Puede ejecutar los comandos desde WinDgb.exe o desde la ventana Inmediato de Visual Studio.

La extensión de depuración de SOS permite ver información acerca del código que se ejecuta dentro de Common Language Runtime. Por ejemplo, puede utilizar la extensión de depuración de SOS para mostrar información acerca del montón administrado, buscar daños en el montón, mostrar tipos de datos internos utilizados por el motor en tiempo de ejecución y ver información acerca de todo el código administrado que se ejecuta dentro del motor en tiempo de ejecución.

Cargar la extensión de depuración de SOS

Para cargar la extensión de depuración de SOS en el depurador WinDbg.exe, ejecute el comando siguiente en la herramienta; para cargar la extensión de depuración de SOS en Visual Studio, ejecute el comando siguiente en la ventana Inmediato durante la depuración:

.loadby sos

Para poder cargar la extensión de depuración de SOS, debe habilitar la depuración no administrada en la configuración del proyecto de su solución. Para algunos lenguajes, la depuración no administrada se encuentra deshabilitada de forma predeterminada.

Nota Para abrir la ventana Inmediato en Visual Studio 2005, haga clic en el menú Depurar, haga clic en el menú Ventanas y, a continuación, haga clic en la opción Inmediato. Opcionalmente, para abrir la ventana Inmediato, puede seleccionar CTRL-ALT-I.

WinDbg.exe y Visual Studio utilizan una versión de SOS.dll que corresponde a la versión de Mscorwks.dll actualmente en uso. En las versiones 1.1 y 2.0 de .NET Framework, SOS.dll se instala en el mismo directorio que Mscorwks.dll. De forma predeterminada, debería utilizar la versión de SOS.dll que coincide con la versión actual de Mscorwks.dll.

Para utilizar un archivo de volcado creado en otro equipo, asegúrese de que el archivo Mscorwks.dll incluido con esa instalación está en su ruta de acceso de símbolos y cargue la versión correspondiente de SOS.dll.

Para cargar una versión concreta de SOS.dll, escriba el comando siguiente en el Depurador de Windows:

.load <full path to sos.dll>

Ejemplos

El comando siguiente muestra el contenido de una matriz en la dirección 00ad28d0. La presentación empieza en el segundo elemento e incluye cinco elementos.

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

El comando siguiente muestra el contenido de un ensamblado en la dirección 1ca248.

!dumpassembly 1ca248

El comando siguiente muestra información acerca del montón del recolector de elementos no utilizados.

!dumpheap

El comando siguiente escribe el contenido del registro de carga en memoria en un archivo denominado Stresslog.txt en el directorio actual.

!DumpLog

El comando siguiente muestra la estructura MethodDesc en la dirección 902f40.

!dumpmd 902f40

El comando siguiente muestra información acerca de un módulo en la dirección 1caa50.

!dumpmodule 1caa50

El comando siguiente muestra información acerca de un objeto en la dirección a79d40.

!DumpObj a79d40

El comando siguiente muestra los campos de una clase de valor en la dirección 00a79d9c utilizando la tabla de métodos en las direcciones 0090320c.

!DumpVC 0090320c 00a79d9c

El comando siguiente muestra la memoria de proceso utilizada por el recolector de elementos no utilizados.

!eeheap -gc

El comando siguiente muestra todos los objetos programados para finalización.

!finalizequeue

El comando siguiente determina el dominio de aplicación de un objeto en la dirección 00a79d98.

!findappdomain 00a79d98

El comando siguiente muestra todos los identificadores del recolector de elementos no utilizados en el proceso actual.

!gcinfo 5b68dbb8 

El comando siguiente muestra las estructuras MethodTable y EEClass para el método Main de la clase MainClass en el módulo unittest.exe.

!name2ee unittest.exe MainClass.Main

El comando siguiente muestra información acerca del símbolo (token) de metadatos en la dirección 02000003 en el módulo unittest.exe.

!token2ee unittest.exe 02000003

Vea también

Referencia

Herramientas de .NET Framework
Símbolo del sistema de SDK