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

La extensión de depuración de SOS (SOS.dll) ayuda a depurar programas administrados en Visual Studio y en el depurador de Windows (WinDbg.exe); para ello, proporciona información sobre el entorno interno de Common Language Runtime (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. Esta herramienta requiere que el proyecto tenga habilitada la depuración no administrada.This tool requires your project to have unmanaged debugging enabled. SOS.dll se instala automáticamente con .NET Framework.SOS.dll is automatically installed with the .NET Framework. Para usar SOS.dll en Visual Studio, instale el Kit para controladores de Windows (WDK).To use SOS.dll in Visual Studio, install the Windows Driver Kit (WDK).

SintaxisSyntax

![command] [options]

ComandosCommands

ComandoCommand DescripciónDescription
AnalyzeOOM (ao)AnalyzeOOM (ao) Muestra la información sobre el último evento de memoria insuficiente (OOM) que se produjo en una solicitud de asignación al montón de recolección de elementos no utilizados.Displays the information for the last out of memory (OOM) that occurred on an allocation request to the garbage collection heap. (En la recolección de elementos no utilizados del servidor, se muestra OOM, si hubiera alguno, en cada montón de recolección de elementos no utilizados).(In server garbage collection, it displays OOM, if any, on each garbage collection heap.)
BPMD [-nofuturemodule] [<module name> <method name>] [-md <MethodDesc>] -list -clear <pending breakpoint number> -clearallBPMD [-nofuturemodule] [<module name> <method name>] [-md <MethodDesc>] -list -clear <pending breakpoint number> -clearall Crea un punto de interrupción en el método especificado en el módulo especificado.Creates a breakpoint at the specified method in the specified module.

Si no se han cargado el módulo y el método especificados, antes de crear el punto de interrupción, este comando espera una notificación de que el módulo se ha cargado y se ha compilado Just-In-Time (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.

Puede administrar la lista de puntos de interrupción pendientes mediante las opciones -list, -clear y -clearall:You can manage the list of pending breakpoints by using the -list, -clear, and -clearall options:

La opción -list genera una lista con todos los puntos de interrupción pendientes.The -list option generates a list of all the pending breakpoints. Si un punto de interrupción pendiente tiene un identificador de módulo distinto de cero, el punto de interrupción es específico de una función de ese módulo cargado en particular.If a pending breakpoint has a non-zero module ID, that breakpoint is specific to a function in that particular loaded module. Si el punto de interrupción pendiente tiene un identificador de módulo cuyo valor es cero, el punto de interrupción se aplica a los módulos que no se han cargado todavía.If the pending breakpoint has a zero module ID, that breakpoint applies to modules that have not yet been loaded.

Use la opción -clear o -clearall para quitar los puntos de interrupción pendientes de la lista.Use the -clear or -clearall option to remove pending breakpoints from the list.
CLRStack [-a] [-l] [-p] [-n]CLRStack [-a] [-l] [-p] [-n] Proporciona un seguimiento de pila del código administrado únicamente.Provides a stack trace of managed code only.

La opción -p muestra los argumentos para la función administrada.The -p option shows arguments to the managed function.

La opción -l muestra información sobre las variables locales de un marco.The -l option shows information on local variables in a frame. La extensión de depuración de SOS no puede recuperar nombres locales, por lo que la salida para los nombres locales tiene el formato <dirección local> = <valor>.The SOS Debugging Extension cannot retrieve local names, so the output for local names is in the format <local address> = <value>.

La opción -a(all) es un acceso directo para -l y -p combinados.The -a(all) option is a shortcut for -l and -p combined.

La opción -n deshabilita la presentación de los nombres de archivo de código fuente y los números de línea.The -n option disables the display of source file names and line numbers. Si el depurador tiene especificada la opción SYMOPT_LOAD_LINES, SOS buscará los símbolos para cada marco administrado y, si los encuentra, mostrará el nombre del archivo de código fuente y el número de línea correspondientes.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. Para deshabilitar este comportamiento, se puede especificar el parámetro -n (sin números de línea).The -n (No line numbers) parameter can be specified to disable this behavior.

La extensión de depuración de SOS no muestra marcos de transición en plataformas basadas en IA-64 y x64.The SOS Debugging Extension does not display transition frames on x64 and IA-64-based platforms.
COMStateCOMState Muestra el modelo de apartamento COM para cada subproceso y un puntero Context, si está disponible.Lists the COM apartment model for each thread and a Context pointer, if available.
DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <dirección de objeto de matriz>DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <array object address>

o bien-or-

DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] dirección de objeto de matriz>DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] array object address>
Examina los elementos de un objeto de matriz.Examines elements of an array object.

La opción -start especifica el índice inicial en el que se mostrarán los elementos.The -start option specifies the starting index at which to display elements.

La opción -length especifica el número de elementos que se van a mostrar.The -length option specifies how many elements to show.

La opción -details muestra detalles del elemento en los formatos DumpObj y DumpVC.The -details option displays details of the element using the DumpObj and DumpVC formats.

La opción -nofields evita que se muestren las matrices.The -nofields option prevents arrays from displaying. Esta opción solo está disponible cuando se especifica la opción -detail.This option is available only when the -detail option is specified.
DumpAssembly <dirección de ensamblado>DumpAssembly <assembly address> Muestra información sobre de un ensamblado.Displays information about an assembly.

El comando DumpAssembly muestra varios módulos, si los hay.The DumpAssembly command lists multiple modules, if they exist.

Con el comando DumpDomain puede obtener la dirección de un ensamblado.You can get an assembly address by using the DumpDomain command.
DumpClass <dirección de EEClass>DumpClass <EEClass address> Muestra información sobre la estructura EEClass asociada a un tipo.Displays information about the EEClass structure associated with a type.

El comando DumpClass muestra los valores de campo estático, pero no muestra los valores de campo no estático.The DumpClass command displays static field values but does not display nonstatic field values.

Utilice los comandos DumpMT, DumpObj, Name2EE o Token2EE para obtener una dirección de la estructura EEClass.Use the DumpMT, DumpObj, Name2EE, or Token2EE command to get an EEClass structure address.
DumpDomain [<dirección de dominio>]DumpDomain [<domain address>] Enumera todos los objetos Assembly que se han cargado en la dirección del objeto AppDomain que se ha especificado.Enumerates each Assembly object that is loaded within the specified AppDomain object address. Cuando se llama sin parámetros, el comando DumpDomain enumera todos los objetos AppDomain de un proceso.When called with no parameters, the DumpDomain command lists all AppDomain objects in a process.
DumpHeap [-stat] [-strings] [-short] [-min <size>] [-max <size>] [-thinlock] [-startAtLowerBound] [-mt <MethodTable address>] [-type <nombre de tipo parcial>][start [end]]DumpHeap [-stat] [-strings] [-short] [-min <size>] [-max <size>] [-thinlock] [-startAtLowerBound] [-mt <MethodTable address>] [-type <partial type name>][start [end]] Muestra información sobre el montón de recolección de elementos no utilizados y estadísticas de recolección de los objetos.Displays information about the garbage-collected heap and collection statistics about objects.

El comando DumpHeap muestra una advertencia si detecta una fragmentación excesiva en el montón del recolector de elementos no utilizados.The DumpHeap command displays a warning if it detects excessive fragmentation in the garbage collector heap.

La opción -stat limita la salida a un resumen estadístico de tipos.The -stat option restricts the output to the statistical type summary.

La opción -strings limita la salida a un resumen estadístico de valores de cadena.The -strings option restricts the output to a statistical string value summary.

La opción -short limita la salida a la dirección de cada objeto.The -short option limits output to just the address of each object. Esto permite canalizar fácilmente la salida del comando a otro comando del depurador para su automatización.This lets you easily pipe output from the command to another debugger command for automation.

La opción -min omite los objetos cuyo tamaño es inferior al valor del parámetro size, especificado en bytes.The -min option ignores objects that are less than the size parameter, specified in bytes.

La opción -max omite los objetos cuyo tamaño es superior al valor del parámetro size, especificado en bytes.The -max option ignores objects that are larger than the size parameter, specified in bytes.

La opción -thinlock genera un informe ThinLocks.The -thinlock option reports ThinLocks. Para más información, consulte el comando SyncBlk.For more information, see the SyncBlk command.

La opción -startAtLowerBound obliga al montón a iniciar su recorrido en el límite inferior del intervalo de direcciones especificado.The -startAtLowerBound option forces the heap walk to begin at the lower bound of a supplied address range. Durante la fase de planeación, con frecuencia el montón no es transitable porque los objetos se están moviendo.During the planning phase, the heap is often not walkable because objects are being moved. Esta opción obliga a DumpHeap a iniciar su recorrido en el límite inferior especificado.This option forces DumpHeap to begin its walk at the specified lower bound. Para que esta opción funcione, debe proporcionar la dirección de un objeto válido como el límite inferior.You must supply the address of a valid object as the lower bound for this option to work. Puede mostrar la memoria en la dirección de un objeto no válido para encontrar manualmente la siguiente tabla de métodos.You can display memory at the address of a bad object to manually find the next method table. 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.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.

La opción -mt muestra solo los objetos correspondientes a la estructura MethodTable especificada.The -mt option lists only those objects that correspond to the specified MethodTable structure.

La opción -type muestra solo los objetos cuyo nombre de tipo es una subcadena de la cadena especificada.The -type option lists only those objects whose type name is a substring match of the specified string.

El parámetro start inicia la lista en la dirección especificada.The start parameter begins listing from the specified address.

El parámetro end detiene la lista en la dirección especificada.The end parameter stops listing at the specified address.
DumpIL <Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer>DumpIL <Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer> Muestra el Lenguaje intermedio de Microsoft (MSIL) que está asociado a un método administrado.Displays the Microsoft intermediate language (MSIL) that is associated with a managed method.

Tenga en cuenta que el MSIL dinámico se emite de manera diferente que el MSIL que se carga desde un ensamblado.Note that dynamic MSIL is emitted differently than MSIL that is loaded from an assembly. El MSIL dinámico hace referencia a objetos de una matriz de objetos administrada en lugar de a tokens de metadatos.Dynamic MSIL refers to objects in a managed object array rather than to metadata tokens.
DumpLog [-addr <addressOfStressLog>] [<Filename>]DumpLog [-addr <addressOfStressLog>] [<Filename>] Escribe el contenido de un registro de esfuerzo existente en memoria en el archivo especificado.Writes the contents of an in-memory stress log to the specified file. Si no se especifica un nombre, este comando crea un archivo denominado StressLog.txt en el directorio actual.If you do not specify a name, this command creates a file called StressLog.txt in the current directory.

El registro de esfuerzo existente en memoria ayuda en el diagnóstico de los errores de esfuerzo sin usar bloqueos ni E/S.The in-memory stress log helps you diagnose stress failures without using locks or I/O. Para habilitar el registro de esfuerzo, establezca las siguientes claves del Registro en 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

La opción -addr opcional permite especificar un registro de esfuerzo distinto del registro predeterminado.The optional -addr option lets you specify a stress log other than the default log.
DumpMD <dirección de MethodDesc>DumpMD <MethodDesc address> Muestra información sobre una estructura MethodDesc en la dirección especificada.Displays information about a MethodDesc structure at the specified address.

Puede usar el comando IP2MD para obtener la dirección de la estructura MethodDesc a partir de una función administrada.You can use the IP2MD command to get the MethodDesc structure address from a managed function.
DumpMT [-MD] <dirección de MethodTable>DumpMT [-MD] <MethodTable address> Muestra información sobre una tabla de métodos en la dirección especificada.Displays information about a method table at the specified address. La opción -MD muestra una lista de todos los métodos definidos con el objeto.Specifying the -MD option displays a list of all methods defined with the object.

Cada objeto administrado contiene un puntero a la tabla de métodos.Each managed object contains a method table pointer.
DumpMethodSig <sigaddr> <moduleaddr>DumpMethodSig <sigaddr> <moduleaddr> Muestra información sobre una estructura MethodSig en la dirección especificada.Displays information about a MethodSig structure at the specified address.
DumpModule [-mt] <dirección del módulo>DumpModule [-mt] <Module address> Muestra información sobre un módulo en la dirección especificada.Displays information about a module at the specified address. La opción -mt muestra los tipos definidos en un módulo y los tipos a los que el módulo hace referencia.The -mt option displays the types defined in a module and the types referenced by the module

Puede usar el comando DumpDomain o DumpAssembly para recuperar la dirección de un módulo.You can use the DumpDomain or DumpAssembly command to retrieve a module's address.
DumpObj [-nofields] <dirección del objeto>DumpObj [-nofields] <object address>

o bien-or-

DO <dirección del obeto>DO <object address>
Muestra información sobre un objeto en la dirección especificada.Displays information about an object at the specified address. El comando DumpObj muestra los campos, información de la estructura EEClass, la tabla de métodos y el tamaño del objeto.The DumpObj command displays the fields, the EEClass structure information, the method table, and the size of the object.

Puede usar el comando DumpStackObjects para recuperar la dirección de un objeto.You can use the DumpStackObjects command to retrieve an object's address.

Tenga presente que puede ejecutar el comando DumpObj en campos de tipo CLASS porque también son objetos.Note that you can run the DumpObj command on fields of type CLASS because they are also objects.

La opción -nofields impide que los campos del objeto se muestren; es útil para objetos como String.The -nofields option prevents fields of the object being displayed, it is useful for objects like String.
DumpRuntimeTypesDumpRuntimeTypes Muestra los objetos de tipo en tiempo de ejecución del montón del recolector de elementos no utilizados y enumera las tablas de métodos y los nombres de tipo asociados.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]] Muestra un seguimiento de la pila.Displays a stack trace.

La opción -EE hace que el comando DumpStack muestre solo funciones administradas.The -EE option causes the DumpStack command to display only managed functions. Use los parámetros top y bottom para limitar los marcos de pila mostrados en las plataformas x86.Use the top and bottom parameters to limit the stack frames displayed on x86 platforms.

La opción -n deshabilita la presentación de los nombres de archivo de código fuente y los números de línea.The -n option disables the display of source file names and line numbers. Si el depurador tiene especificada la opción SYMOPT_LOAD_LINES, SOS buscará los símbolos para cada marco administrado y, si los encuentra, mostrará el nombre del archivo de código fuente y el número de línea correspondientes.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. Para deshabilitar este comportamiento, se puede especificar el parámetro -n (sin números de línea).The -n (No line numbers) parameter can be specified to disable this behavior.

En las plataformas x86 y x64, el comando DumpStack crea un seguimiento de la pila detallado.On x86 and x64 platforms, the DumpStack command creates a verbose stack trace.

En las plataformas basadas en IA-64, el comando DumpStack imita el comportamiento del comando K del depurador.On IA-64-based platforms, the DumpStack command mimics the debugger's K command. Los parámetros top y bottom se omiten en las plataformas basadas en IA-64.The top and bottom parameters are ignored on IA-64-based platforms.
DumpSig <sigaddr> <moduleaddr>DumpSig <sigaddr> <moduleaddr> Muestra información sobre una estructura Sig en la dirección especificada.Displays information about a Sig structure at the specified address.
DumpSigElem <sigaddr> <moduleaddr>DumpSigElem <sigaddr> <moduleaddr> Muestra un único elemento de un objeto de firma.Displays a single element of a signature object. En la mayoría de los casos, deberá usar DumpSig para examinar los objetos de firma individuales.In most cases, you should use DumpSig to look at individual signature objects. Sin embargo, si una firma se ha dañado de alguna manera, puede usar DumpSigElem para leer las partes válidas.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]]

o bien-or-

DSO [-verify] [top stack [bottom stack]]DSO [-verify] [top stack [bottom stack]]
Muestra todos los objetos administrados que se han encontrado dentro de los límites de la pila actual.Displays all managed objects found within the bounds of the current stack.

La opción -verify valida cada campo CLASS no estático de un campo de objeto.The -verify option validates each non-static CLASS field of an object field.

Use el comando DumpStackObject con comandos de seguimiento de pila como el comando K y el comando CLRStack para determinar los valores de los parámetros y las variables locales.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 address> <Address>DumpVC <MethodTable address> <Address> Muestra información sobre los campos de una clase de valor en la dirección especificada.Displays information about the fields of a value class at the specified address.

El parámetro MethodTable permite que el comando DumpVC interprete los campos correctamente.The MethodTable parameter allows the DumpVC command to correctly interpret fields. Las clases de valor no tienen una tabla de métodos como primer campo.Value classes do not have a method table as their first field.
EEHeap [-gc] [-loader]EEHeap [-gc] [-loader] Muestra información sobre la memoria de proceso que usan las estructuras de datos internas de CLR.Displays information about process memory consumed by internal CLR data structures.

Las opciones -gc y -loader limitan la salida de este comando a las estructuras de datos del recolector de elementos no utilizados o del cargador.The -gc and -loader options limit the output of this command to garbage collector or loader data structures.

La información del recolector de elementos no utilizados muestra los intervalos de cada segmento del montón administrado.The information for the garbage collector lists the ranges of each segment in the managed heap. Si el puntero se encuentra en un intervalo de segmento proporcionado por -gc, se trata de un puntero de objeto.If the pointer falls within a segment range given by -gc, the pointer is an object pointer.
EEStack [-short] [-EE]EEStack [-short] [-EE] Ejecuta el comando DumpStack en todos los subprocesos del proceso.Runs the DumpStack command on all threads in the process.

La opción -EE se pasa directamente al comando DumpStack.The -EE option is passed directly to the DumpStack command. El parámetro -short limita la salida a los siguientes tipos de subprocesos:The -short parameter limits the output to the following kinds of threads:

Subprocesos que han tomado un bloqueo.Threads that have taken a lock.

Subprocesos que se han detenido para permitir la recolección de elementos no utilizados.Threads that have been stalled in order to allow a garbage collection.

Subprocesos que están actualmente en el código administrado.Threads that are currently in managed code.
EEVersionEEVersion Muestra la versión de CLR.Displays the CLR version.
EHInfo [<dirección de MethodDesc>] [<dirección de código>]EHInfo [<MethodDesc address>] [<Code address>] Muestra los bloques de control de excepciones de un método especificado.Displays the exception handling blocks in a specified method. Este comando muestra los desplazamientos y las direcciones de código para el bloque de cláusulas (el bloque try) y el bloque del controlador (el bloque catch).This command displays the code addresses and offsets for the clause block (the try block) and the handler block (the catch block).
Preguntas más frecuentesFAQ Muestra las preguntas más frecuentes.Displays frequently asked questions.
FinalizeQueue [-detail] | [-allReady] [-short]FinalizeQueue [-detail] | [-allReady] [-short] Muestra todos los objetos registrados para su finalización.Displays all objects registered for finalization.

La opción -detail muestra información adicional sobre los SyncBlocks que necesitan limpieza y los RuntimeCallableWrappers (RCW) que están a la espera de limpieza.The -detail option displays extra information about any SyncBlocks that need to be cleaned up, and any RuntimeCallableWrappers (RCWs) that await cleanup. Al ejecutarse, el subproceso del finalizador almacena en la memoria caché y limpia ambas estructuras de datos.Both of these data structures are cached and cleaned up by the finalizer thread when it runs.

La opción -allReady muestra todos los objetos que están listos para la finalización, sin tener en cuenta si la recolección de elementos no utilizados los ha marcado ya como tales, o si los marcará la siguiente recolección de elementos no utilizados.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. Los objetos que están en la lista "listos para la finalización" son objetos susceptibles de finalización que ya no tienen raíz.The objects that are in the "ready for finalization" list are finalizable objects that are no longer rooted. Esta opción puede consumir muchos recursos porque comprueba si todos los objetos de las colas susceptibles de finalización siguen teniendo raíz.This option can be very expensive, because it verifies whether all the objects in the finalizable queues are still rooted.

La opción -short limita la salida a la dirección de cada objeto.The -short option limits the output to the address of each object. Si se usa junto con -allReady, enumera todos los objetos que tienen un finalizador y que ya no tienen raíz.If it is used in conjunction with -allReady, it enumerates all objects that have a finalizer that are no longer rooted. Si se usa de manera independiente, enumera todos los objetos que están en las colas "susceptibles de finalización" y "listos para la finalización".If it is used independently, it lists all objects in the finalizable and "ready for finalization" queues.
FindAppDomain <dirección del objeto>FindAppDomain <Object address> Determina el dominio de aplicación de un objeto en la dirección especificada.Determines the application domain of an object at the specified address.
FindRoots -gen <N> | -gen any |<dirección del objeto>FindRoots -gen <N> | -gen any |<object address> Hace que el depurador interrumpa el código que se está depurando en la recolección siguiente de la generación especificada.Causes the debugger to break in the debuggee on the next collection of the specified generation. El efecto se restablece tan pronto como se produce la interrupción.The effect is reset as soon as the break occurs. Para interrumpir la recolección siguiente, vuelva a emitir el comando.To break on the next collection, you have to reissue the command. El formato <dirección del objeto> de este comando se usa después de la interrupción provocada por -gen o -gen any.The <object address> form of this command is used after the break caused by the -gen or -gen any has occurred. En ese momento, el código que se está depurando se encuentra en el estado correcto para que FindRoots identifique las raíces para los objetos de las generaciones actualmente inutilizadas.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] Muestra estadísticas acerca de los identificadores del recolector de elementos no utilizados existentes en el proceso.Displays statistics about garbage collector handles in the process.

La opción -perdomain organiza las estadísticas por dominio de aplicación.The -perdomain option arranges the statistics by application domain.

Use el comando GCHandles para encontrar pérdidas de memoria producidas por la pérdida de identificadores del recolector de elementos no utilizados.Use the GCHandles command to find memory leaks caused by garbage collector handle leaks. Una pérdida de memoria se produce, por ejemplo, cuando el código conserva una matriz grande porque un identificador seguro del recolector de elementos no utilizados todavía señala a dicha matriz y el identificador se descarta sin liberarla.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 Busca en la memoria cualquier referencia a identificadores seguros y anclados del recolector de elementos no utilizados existentes en el proceso y muestra los resultados.Searches memory for any references to strong and pinned garbage collector handles in the process and displays the results. Si se encuentra un identificador, el comando GCHandleLeaks muestra la dirección de la referencia.If a handle is found, the GCHandleLeaks command displays the address of the reference. Si no se encuentra ningún identificador en memoria, este comando muestra una notificación.If a handle is not found in memory, this command displays a notification.
GCInfo <dirección de MethodDesc><dirección de código>GCInfo <MethodDesc address><Code address> Muestra datos que indican en qué momento los registros o las ubicaciones de la pila contienen objetos administrados.Displays data that indicates when registers or stack locations contain managed objects. 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.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] <dirección del objeto>GCRoot [-nostacks] <Object address> Muestra información acerca de las referencias (o raíces) a un objeto en la dirección especificada.Displays information about references (or roots) to an object at the specified address.

El comando GCRoot busca identificadores dentro de otros objetos y dentro de la pila en todo el montón administrado y en la tabla de identificadores.The GCRoot command examines the entire managed heap and the handle table for handles within other objects and handles on the stack. Después, se buscan punteros a objetos en cada pila y en la cola del finalizador.Each stack is then searched for pointers to objects, and the finalizer queue is also searched.

Este comando no determina si una raíz de la pila es válida o se ha descartado.This command does not determine whether a stack root is valid or is discarded. Use 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.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.

La opción -nostacks restringe la búsqueda a objetos accesibles y a identificadores del recolector de elementos no utilizados.The -nostacks option restricts the search to garbage collector handles and reachable objects.
GCWhere <dirección del objeto>GCWhere <object address> 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.Displays the location and size in the garbage collection heap of the argument passed in. Cuando el argumento permanece en el montón administrado, pero no es una dirección de objeto válida, el tamaño se muestra como 0 (cero).When the argument lies in the managed heap but is not a valid object address, the size is displayed as 0 (zero).
help [<comando>] [faq]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.Displays all available commands when no parameter is specified, or displays detailed help information about the specified command.

El parámetro faq muestra respuestas a las preguntas más frecuentes.The faq parameter displays answers to frequently asked questions.
HeapStat [-inclUnrooted | -iu]HeapStat [-inclUnrooted | -iu] Muestra los tamaños de generación de cada montón y el espacio total disponible en cada generación de cada montón.Displays the generation sizes for each heap and the total free space in each generation on each heap. Si se especifica la opción -inclUnrooted, el informe incluye información sobre los objetos administrados del montón de recolección de elementos no utilizados que ya no tienen raíz.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 Libera los recursos usados por la familia de comandos Hist.Releases any resources used by the family of Hist commands.

Generalmente, no tiene que llamar explícitamente a HistClear, puesto que cada comando HistInit limpia los recursos anteriores.Generally, you do not have to explicitly call HistClear, because each HistInit cleans up the previous resources.
HistInitHistInit Inicializa las estructuras SOS del registro de esfuerzo guardado en el código que se está depurando.Initializes the SOS structures from the stress log saved in the debuggee.
HistObj <obj_address>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 ha pasado como argumento.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 <obj_address>HistObjFind <obj_address> Muestra todas las entradas de registro que hacen referencia a un objeto en la dirección especificada.Displays all the log entries that reference an object at the specified address.
HistRoot <raíz>HistRoot <root> Muestra información relacionada con las promociones y las reubicaciones de la raíz especificada.Displays information related to both promotions and relocations of the specified root.

El valor de raíz se puede usar para realizar el seguimiento del movimiento de un objeto a través de las recolecciones de elementos no utilizados.The root value can be used to track the movement of an object through the garbage collections.
IP2MD <dirección del código>IP2MD <Code address> Muestra la estructura MethodDesc en la dirección especificada en el código compilado JIT.Displays the MethodDesc structure at the specified address in code that has been JIT-compiled.
ListNearObj (lno) <obj_address>ListNearObj (lno) <obj_address> Muestra los objetos anteriores y posteriores a la dirección especificada.Displays the objects preceding and following the specified address. El comando busca en el montón de recolección de elementos no utilizados la dirección que parece un principio válido de un objeto administrado (basándose en una tabla de métodos válida) y el objeto que sigue a la dirección del argumento.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] Evita que se ejecuten comandos no seguros al usar un minivolcado.Prevents running unsafe commands when using a minidump.

Pase 0 para deshabilitar esta característica o 1 para habilitarla.Pass 0 to disable this feature or 1 to enable this feature. De forma predeterminada, el valor MinidumpMode se establece en 0.By default, the MinidumpMode value is set to 0.

Los minivolcados creados con el comando .dump /m o .dump tienen datos limitados específicos de CLR y permiten ejecutar correctamente un único subconjunto de comandos de 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. Algunos comandos pueden producir errores inesperados porque no se hayan asignado, o solo se hayan asignado parcialmente, áreas de memoria necesarias.Some commands may fail with unexpected errors because required areas of memory are not mapped or are only partially mapped. Esta opción le impide ejecutar comandos no seguros en minivolcados.This option protects you from running unsafe commands against minidumps.
Name2EE <nombre del módulo> <tipo o nombre del método>Name2EE <module name> <type or method name>

o bien-or-

Name2EE <nombre del módulo>!<tipo o nombre del método>Name2EE <module name>!<type or method name>
Muestra la estructura MethodTable y la estructura EEClass para el tipo o método especificado del módulo especificado.Displays the MethodTable structure and EEClass structure for the specified type or method in the specified module.

El módulo especificado se debe cargar en el proceso.The specified module must be loaded in the process.

Para obtener el nombre de tipo correcto, examine el módulo mediante Ildasm.exe (IL Disassembler).To get the proper type name, browse the module by using the Ildasm.exe (IL Disassembler). También puede pasar * como parámetro de nombre de módulo para buscar en todos los módulos administrados cargados.You can also pass * as the module name parameter to search all loaded managed modules. El parámetro nombre del módulo también puede ser el nombre del depurador de un módulo, como mscorlib o image00400000.The module name parameter can also be the debugger's name for a module, such as mscorlib or image00400000.

Este comando admite la sintaxis del depurador de Windows <module>!<type>.This command supports the Windows debugger syntax of <module>!<type>. El nombre del tipo debe ser completo.The type must be fully qualified.
ObjSize [<dirección del objeto>] | [-aggregate] [-stat]ObjSize [<Object address>] | [-aggregate] [-stat] Muestra el tamaño del objeto especificado.Displays the size of the specified object. 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 del proceso, y suma el tamaño de todos los objetos a los que señalan esos identificadores.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. El comando ObjSize incluye el tamaño de todos los objetos secundarios y del objeto primario.The ObjSize command includes the size of all child objects in addition to the parent.

La opción -aggregate se puede usar junto con el argumento -stat para obtener una vista detallada de los tipos que todavía disponen de raíz.The -aggregate option can be used in conjunction with the -stat argument to get a detailed view of the types that are still rooted. Mediante el uso de !dumpheap -stat y !objsize -aggregate -stat, puede determinar qué objetos han dejado de tener raíz y diagnosticar diversos problemas de memoria.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] [<dirección del objeto de excepción>]PrintException [-nested] [-lines] [<Exception object address>]

o bien-or-

PE [-nested] [<dirección del objeto de excepción>]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.Displays and formats fields of any object derived from the Exception class at the specified address. Si no especifica una dirección, el comando PrintException muestra la última excepción iniciada en el subproceso actual.If you do not specify an address, the PrintException command displays the last exception thrown on the current thread.

La opción -nested muestra detalles acerca de los objetos de excepción anidados.The -nested option displays details about nested exception objects.

La opción -lines muestra información de origen, si está disponible.The -lines option displays source information, if available.

Puede usar este comando para dar formato y ver el campo _stackTrace, que es una matriz binaria.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] Muestra variables de entorno del proceso, el tiempo de CPU en modo kernel y estadísticas de uso de la memoria.Displays environment variables for the process, kernel CPU time, and memory usage statistics.
RCWCleanupList <dirección de RCWCleanupList>RCWCleanupList <RCWCleanupList address> Muestra la lista de contenedores RCW (runtime callable wrapper) que se encuentran en la dirección especificada a la espera de limpieza.Displays the list of runtime callable wrappers at the specified address that are awaiting cleanup.
SaveModule <dirección base> <nombre de archivo>SaveModule <Base address> <Filename> Escribe en el archivo especificado una imagen que está cargada en memoria en la dirección especificada.Writes an image, which is loaded in memory at the specified address, to the specified file.
SOSFlushSOSFlush Vacía una caché de SOS interna.Flushes an internal SOS cache.
StopOnException [-derived] [-create | -create2] <excepción> <número de pseudo registro>StopOnException [-derived] [-create | -create2] <Exception> <Pseudo-register number> Hace que el depurador se detenga si se inicia la excepción especificada y que continúe ejecutándose si se inician otras excepciones.Causes the debugger to stop when the specified exception is thrown, but to continue running when other exceptions are thrown.

La opción -derived detecta la excepción especificada y todas las excepciones que se derivan de la misma.The -derived option catches the specified exception and every exception that derives from the specified exception.
SyncBlk [-all | <número de syncblk>]SyncBlk [-all | <syncblk number>] Muestra la estructura SyncBlock especificada o todas las estructuras SyncBlock.Displays the specified SyncBlock structure or all SyncBlock structures. Si no se pasa ningún argumento, el comando SyncBlk muestra la estructura SyncBlock que corresponde a los objetos que pertenecen a un subproceso.If you do not pass any arguments, the SyncBlk command displays the SyncBlock structure corresponding to objects that are owned by a thread.

Una estructura SyncBlock es un contenedor de información adicional que no es necesario crear para cada objeto.A SyncBlock structure is a container for extra information that does not need to be created for every object. Puede contener datos de interoperabilidad COM, códigos hash e información de bloqueo de operaciones seguras para subprocesos.It can hold COM interop data, hash codes, and locking information for thread-safe operations.
ThreadPoolThreadPool Muestra información acerca del grupo de subprocesos administrados, como el número de solicitudes de trabajo que hay en cola, el número de subprocesos de puerto de finalización y el número de temporizadores.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 <nombre de módulo> <token>Token2EE <module name> <token> Convierte el token de metadatos especificado del módulo especificado en una estructura MethodTable o MethodDesc.Turns the specified metadata token in the specified module into a MethodTable structure or MethodDesc structure.

Se puede pasar * como parámetro de nombre de módulo para averiguar qué tiene asignado ese token en cada módulo administrado cargado.You can pass * for the module name parameter to find what that token maps to in every loaded managed module. También se puede pasar el nombre del depurador para un módulo, como mscorlib o image00400000.You can also pass the debugger's name for a module, such as mscorlib or image00400000.
Threads [-live] [-special]Threads [-live] [-special] Muestra todos los subprocesos administrados del proceso.Displays all managed threads in the process.

El comando Threads muestra el identificador abreviado del depurador, el identificador de subproceso de CLR y el identificador de subproceso del sistema operativo.The Threads command displays the debugger shorthand ID, the CLR thread ID, and the operating system thread ID. 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 iniciada en el subproceso.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.

La opción -live muestra los subprocesos asociados a un subproceso activo.The -live option displays threads associated with a live thread.

La opción -special muestra todos los subprocesos especiales creados por CLR.The -special option displays all special threads created by the 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 del asistente del depurador, subprocesos de finalizador, subprocesos de descarga de AppDomain y subprocesos de temporizador del grupo de subprocesos.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 < campo de valor de estado >ThreadState < State value field > Muestra el estado del subproceso.Displays the state of the thread. El parámetro value es el valor del campo State en la salida del informe Threads.The value parameter is the value of the State field in the Threads report output.

Ejemplo: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] <nombre de archivo>TraverseHeap [-xml] <filename> Escribe información del montón en el archivo especificado, en un formato reconocido por el generador de perfiles CLR.Writes heap information to the specified file in a format understood by the CLR profiler. La opción -xml hace que el comando TraverseHeap dé formato al archivo como XML.The -xml option causes the TraverseHeap command to format the file as XML.

Puede descargar el generador de perfiles CLR desde el Centro de descarga de Microsoft.You can download the CLR Profiler from the Microsoft Download Center.
U [-gcinfo] [-ehinfo] [-n] <dirección de MethodDesc> | <dirección de código>U [-gcinfo] [-ehinfo] [-n] <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.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. El comando U muestra todo el método de principio a fin, con las anotaciones que convierten los tokens de metadatos en nombres.The U command displays the entire method from start to finish, with annotations that convert metadata tokens to names.

La opción -gcinfo hace que el comando U muestre la estructura GCInfo para el método.The -gcinfo option causes the U command to display the GCInfo structure for the method.

La opción -ehinfo muestra información de excepción para el método.The -ehinfo option displays exception information for the method. Esta información también se obtiene con el comando EHInfo.You can also obtain this information with the EHInfo command.

La opción -n deshabilita la presentación de los nombres de archivo de código fuente y los números de línea.The -n option disables the display of source file names and line numbers. 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 de código fuente y el número de línea correspondientes.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. Puede especificar la opción -n para deshabilitar este comportamiento.You can specify the -n option to disable this behavior.
VerifyHeapVerifyHeap Comprueba el montón del recolector de elementos no utilizados en busca de indicios de daños, y muestra los errores encontrados.Checks the garbage collector heap for signs of corruption and displays any errors found.

Los daños del montón pueden deberse a invocaciones de plataforma construidas de forma incorrecta.Heap corruptions can be caused by platform invoke calls that are constructed incorrectly.
VerifyObj <dirección del objeto>VerifyObj <object address> Comprueba el objeto que se pasa como argumento en busca de indicios de daños.Checks the object that is passed as an argument for signs of corruption.
VMMapVMMap Recorre el espacio de direcciones virtuales y muestra el tipo de protección aplicado a cada área.Traverses the virtual address space and displays the type of protection applied to each region.
VMStatVMStat Proporciona una vista de resumen del espacio de direcciones virtuales, ordenada según el tipo de protección que se ha aplicado a esa memoria (libre, reservada, confirmada, privada, asignada, imagen).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). La columna TOTAL muestra el resultado de multiplicar la columna AVERAGE por la columna BLK COUNT.The TOTAL column displays the result of the AVERAGE column multiplied by the BLK COUNT column.

ComentariosRemarks

La extensión de depuración de SOS permite ver información sobre el código que se ejecuta en CLR.The SOS Debugging Extension lets you view information about code that is running inside the CLR. Por ejemplo, puede usar 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 usados por el runtime y ver información acerca de todo el código administrado que se ejecuta en el runtime.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.

Para usar la extensión de depuración de SOS en Visual Studio, instale el Kit para controladores de Windows (WDK).To use the SOS Debugging Extension in Visual Studio, install the Windows Driver Kit (WDK). Para más información sobre el entorno de depuración integrado de Visual Studio, vea el tema sobre entornos de depuración.For information about the integrated debugging environment in Visual Studio, see Debugging Environments.

También puede usar la extensión de depuración de SOS cargándola en el depurador WinDbg.exe y ejecutando los comandos de WinDbg.exe.You can also use the SOS Debugging Extension by loading it into the WinDbg.exe debugger and executing commands within WinDbg.exe.

Para cargar la extensión de depuración de SOS en el depurador WinDbg.exe, ejecute el siguiente comando en la herramienta:To load the SOS Debugging Extension into the WinDbg.exe debugger, run the following command in the tool:

.loadby sos clr

WinDbg.exe y Visual Studio usan una versión de SOS.dll que corresponde a la versión de Mscorwks.dll actualmente en uso.WinDbg.exe and Visual Studio use a version of SOS.dll that corresponds to the version of Mscorwks.dll currently in use. De forma predeterminada, debería utilizar la versión de SOS.dll que coincide con la versión actual de Mscorwks.dll.By default, you should use the version of SOS.dll that matches the current version of Mscorwks.dll.

Para usar un archivo de volcado de memoria creado en otro equipo, asegúrese de que el archivo Mscorwks.dll incluido en esa instalación está en su ruta de acceso de símbolos y cargue la versión correspondiente de 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.

Para cargar una versión concreta de SOS.dll, escriba el comando siguiente en el Depurador de Windows:To load a specific version of SOS.dll, type the following command into the Windows Debugger:

.load <full path to sos.dll>

EjemplosExamples

El comando siguiente muestra el contenido de una matriz en la dirección 00ad28d0.The following command displays the contents of an array at the address 00ad28d0. La presentación empieza en el segundo elemento e incluye cinco elementos.The display starts from the second element and continues for five elements.

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

El comando siguiente muestra el contenido de un ensamblado en la dirección 1ca248.The following command displays the contents of an assembly at the address 1ca248.

!dumpassembly 1ca248

El comando siguiente muestra información acerca del montón del recolector de elementos no utilizados.The following command displays information about the garbage collector heap.

!dumpheap

El comando siguiente escribe el contenido del registro de esfuerzo en memoria en un archivo (predeterminado) denominado StressLog.txt en el directorio actual.The following command writes the contents of the in-memory stress log to a (default) file called StressLog.txt in the current directory.

!DumpLog

El comando siguiente muestra la estructura MethodDesc en la dirección 902f40.The following command displays the MethodDesc structure at the address 902f40.

!dumpmd 902f40

El comando siguiente muestra información acerca de un módulo en la dirección 1caa50.The following command displays information about a module at the address 1caa50.

!dumpmodule 1caa50

El comando siguiente muestra información acerca de un objeto en la dirección a79d40.The following command displays information about an object at the address a79d40.

!DumpObj a79d40

El comando siguiente muestra los campos de una clase de valor en la dirección 00a79d9c usando la tabla de métodos en la dirección 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

El comando siguiente muestra la memoria de proceso usada por el recolector de elementos no utilizados.The following command displays the process memory used by the garbage collector.

!eeheap -gc

El comando siguiente muestra todos los objetos programados para su finalización.The following command displays all objects scheduled for finalization.

!finalizequeue

El comando siguiente determina el dominio de aplicación de un objeto en la dirección 00a79d98.The following command determines the application domain of an object at the address 00a79d98.

!findappdomain 00a79d98

El comando siguiente muestra todos los identificadores del recolector de elementos no utilizados del proceso actual.The following command displays all garbage collector handles in the current process.

!gcinfo 5b68dbb8

El comando siguiente muestra las estructuras MethodTable y EEClass para el método Main de la clase MainClass del módulo 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

El comando siguiente muestra información acerca del token de metadatos en la dirección 02000003 del módulo unittest.exe.The following command displays information about the metadata token at the address 02000003 in the module unittest.exe.

!token2ee unittest.exe 02000003

Vea tambiénSee also