Compartir a través de


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

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). Esta herramienta requiere que el proyecto tenga habilitada la depuración no administrada. También puede usar la extensión de depuración de SOS con el depurador de Windows (WinDbg.exe).

Esta herramienta se instala automáticamente con Visual Studio y con el SDK de Windows. Para ejecutar la herramienta, se recomienda usar el símbolo del sistema de Visual Studio o del SDK de Windows (shell de CMD). Estas utilidades permiten ejecutar la herramienta fácilmente, sin navegar a la carpeta de instalación. Para obtener más información, vea Símbolos del sistema del SDK de Windows y Visual Studio.

  • Si tiene instalado Visual Studio en el equipo: en la barra de tareas, haga clic en Start, All Programs, Visual Studio y Visual Studio Tools y, a continuación, haga clic en Visual Studio Command Prompt.

    O bien

    Si tiene el SDK de Windows instalado en el equipo: en la barra de tareas, haga clic en Start, All Programs, haga clic en la carpeta del SDK de Windows y, a continuación, haga clic en Command Prompt (o CMD Shell).

  • En el símbolo del sistema, escriba:

![command] [options] 

Comandos

Comando

Descripción

AnalyzeOOM (ao)

Muestra la información acerca de los últimos OOM que se produjeron en una solicitud de asignación al montón de recolección de elementos no utilizados. (En recolección de elementos no utilizados del servidor, se muestra OOM, si existe, en cada montón de recolección de elementos no utilizados.)

BPMD [-nofuturemodule] [<nombre del módulo> <nombre del método>] [-md <MethodDesc>] -list-clear <número de punto de interrupción pendiente> -clearall

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 (JIT).

Puede administrar la lista de puntos de interrupción pendientes mediante las opciones -list, -clear y -clearall:

  • La opción -list genera una lista de todos los puntos de interrupción pendientes. Si un punto de interrupción pendiente tiene un módulo id. distinto de cero, ese punto de interrupción es específico para una función en ese módulo cargado en particular. Si el punto de interrupción pendiente tiene un módulo id. cero, ese punto de interrupción se aplica a los módulos que no se han cargado todavía.

  • Use la opción -clear o -clearall para quitar los puntos de interrupción pendientes de la lista.

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

Proporciona una traza 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 <dirección local> = <valor>.

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

  • La opción -n deshabilita la presentación de los nombres de archivo de origen y números de línea. Si el depurador tiene especificada la opción SYMOPT_LOAD_LINES, SOS mejorará los símbolos para cada marco administrado y, si lo hace correctamente, mostrará el nombre de archivo origen y el número de línea correspondiente . El parámetro -n (ningún número de línea) se puede especificar para deshabilitar este comportamiento.

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 <índice inicial>] [-length <longitud>] [-details] [-nofields] <dirección del objeto de matriz>

O bien

DA [-start <índice inicial>] [-length <longitud>] [-detail] [-nofields] dirección del objeto de matriz>

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 -details 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 <dirección del ensamblado>

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 <dirección de EEClass>

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 el comando DumpMT, DumpObj, Name2EE o Token2EE para obtener una dirección de estructura EEClass.

DumpDomain [<dirección del dominio>]

Enumera cada objeto Assembly que está 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] [-strings] [-short] [-min <tamaño>] [-max <tamaño>] [-thinlock] [-startAtLowerBound] [-mt <dirección de MethodTable>] [-type <nombre de tipo parcial>][inicio []]

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 -strings restringe el resultado a un resumen de valor de cadena estadístico.

  • La opción -short limita la salida a simplemente la dirección de cada objeto. Esto permite fácilmente la salida de canalización del comando a otro comando de depurador para la automatización.

  • 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 ThinLocks. Para obtener más información, vea el comando SyncBlk.

  • La opción -startAtLowerBound obliga al control de montones que comience en el límite inferior de un intervalo de dirección proporcionado. Durante la fase del planeamiento, con frecuencia el montón no es transitable porque se mueven los objetos. Esta opción obliga a DumpHeap para iniciar su recorrido en el límite inferior especificado. Debe proporcionar la dirección de un objeto válido como el límite inferior para que esta opción funcione. Puede mostrar la memoria en la dirección de un objeto no válido para encontrar manualmente la siguiente tabla de métodos. Si la recolección de elementos no utilizados se encuentra actualmente en una llamada a memcopy, puede que también encuentre la dirección del objeto siguiente agregando el tamaño a la dirección de inicio, que se proporciona como un parámetro.

  • 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 <objeto DynamicMethod administrado> | <puntero DynamicMethodDesc> | <puntero MethodDesc>

Muestra el Lenguaje Intermedio de Microsoft (MSIL) que está asociado a un método administrado.

Observe que el MSIL dinámico se emite de manera diferente que el MSIL que se carga desde un ensamblado. El MSIL dinámico hace referencia a objetos de una matriz de objetos administrada en lugar de a tokens de metadatos.

DumpLog [-addr <addressOfStressLog>] [<nombre de archivoe>]

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.

El registro de carga en memoria ayuda en el diagnóstico de los errores de carga 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

La opción -addr opcional permite especificar un registro de carga distinto del registro predeterminado.

DumpMD <dirección de MethodDesc>

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] <dirección de MethodTable>

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 <dirección de la firma> <dirección del módulor>

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

DumpModule [-mt] <dirección del módulo>

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 [-nofields] <dirección del objeto>

O bien

DO <dirección del objeto>

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.

La -nofields opción evita que los campos del objeto se muestren, es útil para los objetos como Cadena.

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] [-n] [top pila [bottom pilak]]

Muestra una traza 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.

  • La opción -n deshabilita la presentación de los nombres de archivo de origen y números de línea. Si el depurador tiene especificada la opción SYMOPT_LOAD_LINES, SOS mejorará los símbolos para cada marco administrado y, si lo hace correctamente, mostrará el nombre de archivo origen y el número de línea correspondiente . El parámetro -n (ningún número de línea) se puede especificar para deshabilitar este comportamiento.

En las plataformas x86 y x64f, el comando DumpStack crea una traza de pila detallada.

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

DumpSig <dirección de la firma> <dirección del módulo>

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

DumpSigElem <dirección de la firma> <dirección del módulo>

Muestra un elemento único de un objeto de firma. En la mayoría de los casos, debería utilizar DumpSig para examinar los objetos de firma individuales. Sin embargo, si una firma se ha dañado de alguna manera, puede usar DumpSigElem para leer las partes válidas.

DumpStackObjects [-verify] [top pila [bottom pila]]

O bien

DSO [-verify] [top pila [bottom pila]]

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 traza de pila como el comando K y el comando CLRStack para determinar los valores de parámetros y variables locales.

DumpVC <dirección de MethodTable> <dirección>

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 -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:

  • Subprocesos que han tomado un bloqueo.

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

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

EEVersion

Muestra la versión de Common Language Runtime.

EHInfo [<dirección de MethodDesc>] [<dirección del código>]

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).

FAQ

Muestra las preguntas más frecuentes

FinalizeQueue [-detail] | [-allReady] [-short]

Muestra todos los objetos registrados para su finalización.

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

  • La opción -allReady muestra todos los objetos que están listos para finalización, sin tener en cuenta si la recolección de elementos no utilizados los ha marcado ya como tal, o los marcará la siguiente recolección de elementos no utilizados. Los objetos que no se encuentran en la lista "listos para la finalización" son objetos susceptibles de finalización que ya no se arraigan. Esta opción puede consumir muchos recursos, debido a que comprueba si todos los objetos de las colas susceptibles de finalización todavía están arraigados.

  • La opción -short limita la salida a la dirección de cada objeto. Si se utiliza junto con -allReady, enumera todos los objetos que tienen un finalizador que ya no se arraiga. Si se utiliza de manera independiente, enumera todos los objetos susceptibles de finalización y las colas "listas para la finalización".

FindAppDomain <dirección del objeto>

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

FindRoots -gen <N> | -gen any |<dirección del objeto>

Hace que el depurador interrumpa el código que está siendo depurado en la colección siguiente de la generación especificada. El efecto se restablece tan pronto como se produce la interrupción. Para interrumpir en la colección siguiente, tiene que volver a emitir el comando. El formulario <dirección del objeto > de este comando se usa después de producirse la interrupción provocada por -gen o -gen any. En ese momento, el código que está siendo depurado se encuentra en el estado correcto para que FindRoots identifique las raíces para los objetos de las actuales generaciones inutilizadas.

GCHandles [-perdomain]

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

La opción -perdomain organiza las estadísticas 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 anclados 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 <dirección de MethodDesc><dirección del código>

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] <dirección del objeto>

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.

GCWhere <dirección del objeto>

Muestra la ubicación y el tamaño en el montón de recolección de elementos no utilizados del argumento que se ha pasado. Cuando el argumento queda en el montón administrado pero no es una dirección de objeto válida, el tamaño se muestra como 0 (cero).

help [<comando>] [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.

HeapStat [-inclUnrooted | -iu]

Muestra los tamaños de generación para cada montón y el espacio disponible total en cada generación de cada montón. Si se especifica la - opcióninclUnrooted, el informe incluye información sobre los objetos administrados del montón de recolección de elementos no utilizados que ya no se arraiga.

HistClear

Libera cualquier recurso utilizados por la familia de comandos Hist.

Generalmente, no tiene que llamar explícitamente a HistClear, puesto que cada HistInit limpia los recursos anteriores.

HistInit

Inicializa las estructuras SOS del registro de carga guardado en el código que está siendo depurado.

HistObj <obj_address>

Examina todos los registros de reubicación del registro de esfuerzo y muestra la cadena de reubicaciones de recolección de elementos no utilizados que pueden haber conducido a la dirección que se pasa como un argumento.

HisttObjFind <obj_address>

Muestra todas las entradas de registro que hacen referencia a un objeto en la dirección especificada.

HistRoot <raíz>

Muestra información relacionada con promociones y reubicaciones de la raíz especificada.

El valor de raíz se puede utilizar para realizar el seguimiento del movimiento de un objeto a través de recolecciones de elementos no utilizados.

IP2MD <dirección del código>

Muestra la estructura MethodDesc en la dirección especificada en código compilado JIT.

ListNearObj (lno) <obj_address>

Muestra los objetos anteriores y posteriores a la dirección especificada. El comando busca la dirección en el montón de recolección de elementos no utilizados que se ve como un principio válido de un objeto administrado (basado en una tabla de método válida) y el objeto que sigue la dirección de argumento.

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 <nombre del módulo> <nombre del tipo o método>

O bien

Name2EE <nombre del módulo>!<nombre del tipo o método>

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 Ildasm.exe (Desensamblador de MSIL). También puede pasar * como parámetro de nombre del módulo para buscar en todos los módulos administrados cargados. El parámetro nombre del módulo también puede ser el nombre del depurador de 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 [<dirección del objeto>] | [-aggregate] [-stat]

Muestra el tamaño del objeto especificado. Si no especifica ningún parámetro, 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.

La opción -aggregate se puede utilizar junto con el argumento -stat para obtener una vista detallada de los tipos que todavía están arraigados. Mediante el uso de !dumpheap -stat y !objsize -aggregate -stat, puede determinar qué objetos ya no se arraigan y diagnostican varios problemas de la memoria.

PrintException [-nested] [-lines] [<dirección de objeto de excepción>]

O bien

PE [-nested] [<dirección de objeto de excepción>]

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.

  • La opción -lines muestra información de origen, si está disponible.

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 kernel y estadísticas de utilización de memoria.

RCWCleanupList <dirección de RCWCleanupList>

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

SaveModule <dirección base> <nombre de archivo>

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

SOSFlush

Vacía una caché SOS interna.

StopOnException [-derived] [-create | -create2] <Excepción> <número de pseudorregistro>

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 | <número de syncblk>]

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 <nombre del módulo> <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 de nombre de módulo con el fin de averiguar a qué está asignado ese 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 en la que se indica el dominio de aplicación donde se ejecuta un subproceso, una columna APT en la que se muestra el modo de apartamento COM, y una columna Exception en la que se muestra la última excepción que se ha producido 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 (en recolección de elementos no utilizados simultánea y del servidor), subprocesos auxiliares del depurador, subprocesos finalizadores, subprocesos de descarga de AppDomain y subprocesos de temporizador del grupo de subprocesos.

ThreadState <Campo de valor de estado>

Muestra el estado del subproceso. El parámetro value es el valor del campo State en la salida del informe Threads.

Ejemplo:

    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] <nombre de archivo>

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.

EL generador de perfiles de CLR se puede descargar en Microsoft Download Center.

U [-gcinfo] [-ehinfo] [-n] <dirección de MethodDesc> | <dirección del código>

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.

  • La opción -n deshabilita la presentación de los nombres de archivo de origen y números de línea. Si el depurador tiene especificada la opción SYMOPT_LOAD_LINES, SOS mejora los símbolos para cada marco administrado y, si lo hace correctamente, muestra el nombre de archivo origen y el número de línea correspondiente . Puede especificar la opción -n para deshabilitar este comportamiento.

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.

VerifyObj <dirección del objeto>

Comprueba el objeto que se pasa como un argumento en indicios de daño.

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

Si desea usar la extensión de depuración de SOS, cárguela en el depurador WinDbg.exe, que también está disponible en el sitio web WDK and Developer Tools, así como en Visual Studio. 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 siguiente comando en la herramienta:

.loadby sos clr

Para cargar la extensión de depuración de SOS en Visual Studio, ejecute el siguiente comando en la ventana Inmediato durante la depuración:

.load SOS.dll

Si el comando se ejecuta correctamente, devolverá el siguiente mensaje en la ventana Inmediato:

extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded

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. Algunas plataformas no permiten la depuración simultánea de código administrado y código no administrado.

NotaNota

Para mostrar la ventana Inmediato en Visual Studio, elija Ventanas en el menú Depurar y, a continuación, haga clic en la opción Inmediato.La ventana Inmediato de Visual Studio también se puede abrir presionando 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 de memoria 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 (predeterminado) 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 la dirección 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

Símbolos del sistema del SDK de Windows y Visual Studio

Otros recursos

Herramientas de .NET Framework

Historial de cambios

Fecha

Historial

Motivo

1 de abril de 2011

Se agregó información sobre el uso de los símbolos del sistema de Visual Studio y del SDK de Windows.

Mejora de la información.