Compartir vía


Extensión de depuración de SOS

La extensión de depuración de SOS le permite ver información sobre el código que se ejecuta dentro del entorno de ejecución de .NET, tanto en procesos activos como volcados de memoria. Esta extensión está preinstalada con dotnet-dump y WinDbg/dbg, y se puede descargar para su uso con LLDB. Puede usar la extensión de depuración de SOS para:

  • Recopilar información acerca del montón administrado.
  • Comprobar si el montón está dañado.
  • Mostrar los tipos de datos internos usados por el tiempo de ejecución.
  • Vea información sobre todo el código administrado que se ejecuta dentro del entorno de ejecución.

Sintaxis

En Windows: ![command] [options]

En Linux y macOS: sos [command] [options]

Muchos de los comandos tienen alias o accesos directos en lldb: clrstack [options]

Comandos:

La siguiente tabla de comandos también está disponible escribiendo los comandos Help o soshelp. Para obtener ayuda de un comando individual, use soshelp <command>.

Get-Help Descripción
bpmd [-nofuturemodule] [<nombre del método de nombre<>> del módulo] [-md><MethodDesc] -list -clear<pending breakpoint number-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 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).

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

La opción -list genera una lista con todos los puntos de interrupción pendientes. 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. 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.

Use la opción -clear o -clearall para quitar los puntos de interrupción pendientes de la lista.
CLRStack [ -a] [ -l] [ -p] [ -n] [ -f] [ -r] [ -all] Proporciona un seguimiento de pila del código administrado únicamente.

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

La opción -l muestra información sobre las variables locales de un marco. La extensión de depuración soS no puede recuperar nombres locales, por lo que la salida de los nombres locales está en el valor> de dirección<>=local de formato.<

La opción -a es un acceso directo para -l y -p combinados.

La opción -n deshabilita la presentación de los nombres de archivo de código fuente y los números de línea. 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. Para deshabilitar este comportamiento, se puede especificar el parámetro -n (sin números de línea).

La opción -f (modo completo) muestra los marcos nativos combinados con los marcos administrados, y también el nombre del ensamblado y el desplazamiento de función para los marcos administrados. Esta opción no muestra los marcos nativos cuando se usa con dotnet-dump.

La opción -r vuelca los registros de cada marco de pila.

La opción -all vuelca todas las pilas de subprocesos administrados.
COMState Muestra el modelo de apartamento COM para cada subproceso y un puntero Context, si está disponible. Este comando solo se admite en Windows.
DumpArray [-start<startIndex>] [-length<longitud>] [-details] [-nofields] <dirección del objeto de matriz>

O bien

DA [-start<startIndex>] [-length<length>] [-details] [-nofields] dirección de objeto de matriz>
Examina los elementos de un objeto de matriz.

La opción -start especifica el índice inicial en el que se mostrarán los elementos.

La opción -length especifica el número de elementos que 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 solo está disponible cuando se especifica la opción -details.
DumpAsync (dumpasync) [-mt<dirección de MethodTable>] [-type<nombre de tipo parcial>] [-waiting] [-roots] DumpAsync recorre el montón de recolección de elementos no utilizados buscando objetos que representan máquinas de estados asincrónicas, que se crean cuando el estado de un método asincrónico se transfiere al montón. Este comando reconoce las máquinas de estados asincrónicas definidas como async void, async Task, async Task<T>, async ValueTask y async ValueTask<T>.

La salida incluye un bloque de detalles para cada objeto de máquina de estados asincrónica encontrado. Estos detalles incluyen:
- Una línea para el tipo del objeto de máquina de estados asincrónica, incluida su dirección de MethodTable, su dirección de objeto, su tamaño y su nombre de tipo.
- Una línea para el nombre de tipo de la máquina de estados tal y como está en el objeto.
- Una lista de cada campo en la máquina de estados.
- Una línea para una continuación de este objeto de máquina de estados, si se han registrado uno o más.
- Las raíces de GC detectadas para este objeto de máquina de estados asincrónica.
DumpAssembly<dirección de ensamblado> Muestra información sobre de un ensamblado.

El comando DumpAssembly muestra varios módulos, si los hay.

Con el comando DumpDomain puede obtener la dirección de un ensamblado.
DumpClass<dirección de EEClass> Muestra información sobre 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 la estructura EEClass.
DumpDomain [<dirección de dominio>] Enumera cada Assembly objeto que se carga dentro de la dirección de objeto especificada AppDomain . Cuando se llama sin parámetros, el comando DumpDomain enumera todos los objetos AppDomain de un proceso. Puesto que .NET (Core) solo tiene un AppDomain, DumpDomain solo devuelve un objeto .
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.

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 limita la salida a un resumen estadístico de tipos.

La opción -strings limita la salida a un resumen estadístico de valores de cadena.

La opción -short limita la salida a la dirección de cada objeto. Esto permite canalizar fácilmente la salida del comando a otro comando del depurador para su 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 más información, consulte el comando SyncBlk.

La opción -startAtLowerBound obliga al montón a iniciar su recorrido en el límite inferior del intervalo de direcciones especificado. Durante la fase de planeación, con frecuencia el montón no es transitable porque los objetos se están moviendo. Esta opción obliga a DumpHeap a iniciar su recorrido en el límite inferior especificado. Para que esta opción funcione, debe proporcionar la dirección de un objeto válido como el límite inferior. 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 solo los objetos correspondientes a la estructura MethodTable especificada.

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

El parámetro start inicia la lista en la dirección especificada.

El parámetro end detiene la lista en la dirección especificada.
DumpIL<objeto DynamicMethod administrado> | <puntero de DynamicMethodDesc> | <puntero de MethodDesc> Muestra el lenguaje intermedio común (CIL) asociado a un método administrado.

La CIL dinámica se emite de forma diferente a la CIL que se carga desde un ensamblado. La CIL dinámica hace referencia a objetos de una matriz de objetos administrados en lugar de a tokens de metadatos.
DumpLog [-addr<addressOfStressLog>] [<Nombre de archivo>] Escribe el contenido de un registro de esfuerzo existente 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 esfuerzo existente en memoria ayuda en el diagnóstico de los errores de esfuerzo sin usar bloqueos ni E/S. Para habilitar el registro de esfuerzo, establezca las siguientes claves del Registro en 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 esfuerzo distinto del registro predeterminado.
DumpMD<dirección de MethodDesc> Muestra información sobre una estructura MethodDesc en la dirección especificada.

Puede usar el comando IP2MD para obtener la dirección de la estructura MethodDesc a partir de una función administrada.
DumpMT [-MD] <dirección de MethodTable> Muestra información sobre una tabla de métodos en la dirección especificada. La opción -MD muestra una lista de todos los métodos definidos con el objeto.

Cada objeto administrado contiene un puntero a la tabla de métodos.
DumpModule [-mt] <dirección del módulo> Muestra información sobre 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 usar 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 obeto>
Muestra información sobre un objeto en la dirección especificada. El comando DumpObj muestra los campos, información de la estructura EEClass, la tabla de métodos y el tamaño del objeto.

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

Puede ejecutar el comando DumpObj en campos de tipo CLASS porque también son objetos.

La opción -nofields impide que los campos del objeto se muestren; es útil para objetos como String.
DumpRuntimeTypes 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.
DumpStack [-EE] [-n] [top stack [bottom stack]] Muestra un seguimiento de la pila.

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

La opción -n deshabilita la presentación de los nombres de archivo de código fuente y los números de línea. 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. Para deshabilitar este comportamiento, se puede especificar el parámetro -n (sin números de línea).
DumpSig<sigaddr><moduleaddr> Muestra información sobre una estructura Sig en la dirección especificada.
DumpSigElem<sigaddr><moduleaddr> Muestra un único elemento de un objeto de firma. En la mayoría de los casos, deberá usar 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 stack [bottom stack]]

O bien

DSO [-verify] [top stack [bottom stack]]
Muestra todos los objetos administrados que se han encontrado 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.

Use el comando DumpStackObject con comandos de seguimiento de pila, como K (WinDbg) o bt (LLDB), junto con el comando clrstack, para determinar los valores de los parámetros y las variables locales.
DumpVC<MethodTable address><Address> Muestra información sobre 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 sobre la memoria de proceso que usan las estructuras de datos internas del entorno de ejecución.

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.

La información del recolector de elementos no utilizados muestra los intervalos de cada segmento del montón administrado. Si el puntero se encuentra en un intervalo de segmento proporcionado por -gc, se trata de 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 la salida a los siguientes tipos de subprocesos:

Subprocesos que han tomado un bloqueo.

Subprocesos que se han detenido para permitir la recolección de elementos no utilizados.

Subprocesos que están actualmente en el código administrado.
EHInfo [<dirección de MethodDesc>] [<dirección de código>] Muestra los bloques de control de excepciones de 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 del controlador (el bloque catch).
Preguntas más frecuentes Muestra las preguntas más frecuentes. No se admite en dotnet-dump.
FinalizeQueue [-detail] | [-allReady] [-short] Muestra todos los objetos registrados para su finalización.

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. Al ejecutarse, el subproceso del finalizador almacena en la memoria caché y limpia ambas estructuras de datos.

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. 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. Esta opción puede consumir muchos recursos porque comprueba si todos los objetos de las colas susceptibles de finalización siguen teniendo raíz.

La opción -short limita la salida a la dirección de cada objeto. Si se usa junto con -allReady, enumera todos los objetos que tienen un finalizador y que ya no tienen raíz. 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".
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 se está depurando en la recolección siguiente de la generación especificada. El efecto se restablece tan pronto como se produce la interrupción. Para interrumpir la recolección siguiente, vuelva a emitir el comando. El formato de <dirección del objeto> de este comando se usa una vez que se produce la interrupción provocada por -gen o -gen any. 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. Solo se admite en Windows.
GCHandles [ -perdomain] Muestra estadísticas acerca de los identificadores del recolector de elementos no utilizados existentes en el proceso.

La opción -perdomain organiza las estadísticas por dominio de aplicación.

Use el comando GCHandles para encontrar pérdidas de memoria producidas por la pérdida de identificadores del recolector de elementos no utilizados. 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.

Solo se admite en Windows.
GCHandleLeaks 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. Si se encuentra un identificador, el comando GCHandleLeaks muestra la dirección de la referencia. Si no se encuentra ningún identificador en memoria, este comando muestra una notificación. Solo se admite en Windows.
GCInfo<dirección de MethodDesc><dirección de código> Muestra datos que indican en qué momento 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] [-all] <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 y dentro de 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 en la cola del finalizador.

Este comando no determina si una raíz de la pila es válida o se ha descartado. 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.

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

La opción -all obliga a que se muestren todas las raíces en lugar de solo las raíces únicas.
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. 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).
Help (soshelp) [<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 las preguntas más frecuentes.
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. 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. Solo se admite en Windows.
HistClear Libera los recursos usados por la familia de comandos Hist.

Generalmente, no tiene que llamar explícitamente a HistClear, puesto que cada comando HistInit limpia los recursos anteriores.
HistInit Inicializa las estructuras SOS del registro de esfuerzo guardado en el código que se está depurando.
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.
HistObjFind <obj_address> Muestra todas las entradas de registro que hacen referencia a un objeto en la dirección especificada.
HistRoot <root> Muestra información relacionada con las promociones y las reubicaciones de la raíz especificada.

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.
IP2MD (ip2md) <dirección de código> Muestra la estructura MethodDesc en la dirección especificada en el código compilado JIT.
ListNearObj (lno) <obj_address> Muestra los objetos anteriores y posteriores a la dirección especificada. 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. Solo se admite en Windows.
MinidumpMode [0] [1] Evita que se ejecuten comandos no seguros al usar un minivolcado.

Pase 0 para deshabilitar esta característica o 1 para habilitarla. De forma predeterminada, el valor MinidumpMode se establece en 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. Algunos comandos pueden producir errores inesperados porque no se hayan asignado, o solo se hayan asignado parcialmente, áreas de memoria necesarias. Esta opción le impide ejecutar comandos no seguros en minivolcados.

Solo se admite con WinDbg.
Name2EE (name2ee) <nombre del módulo><nombre de método o tipo>

O bien

Name2EE<nombre del módulo>!<tipo o nombre del método>
Muestra la estructura MethodTable y la estructura EEClass para el tipo o método especificado del 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 Ildasm.exe (Desensamblador de IL). También puede pasar * como parámetro de nombre de 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 del 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 usar junto con el argumento -stat para obtener una vista detallada de los tipos que todavía disponen de raíz. 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.

Solo se admite en Windows.
PrintException [-nested] [-lines] [<dirección del objeto de excepción>]

O bien

PE [-nested] [<dirección del 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 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 usar este comando para dar formato y ver el campo _stackTrace, que es una matriz binaria.
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. Solo se admite con WinDbg.
RCWCleanupList<dirección de RCWCleanupList> Muestra la lista de contenedores RCW (runtime callable wrapper) que se encuentran en la dirección especificada a la espera de limpieza. Solo se admite con WinDbg.
SaveModule<dirección base><nombre de archivo> Escribe en el archivo especificado una imagen que está cargada en memoria en la dirección especificada. Solo se admite con WinDbg.
SetHostRuntime [<runtime-directory>] Este comando establece la ruta de acceso al entorno de ejecución de .NET que se usará para hospedar el código administrado que se ejecuta como parte de SOS en el depurador (lldb). La versión del entorno de ejecución debe ser al menos 2.1.0 o posterior. Si hay espacios en el directorio, se deben usar comillas simples (').

Normalmente, SOS intenta encontrar un entorno de ejecución de .NET instalado para ejecutar automáticamente su código administrado, pero este comando está disponible si se produce un error. De forma predeterminada, se usa el mismo entorno de ejecución (libcoreclr) que se está depurando. Use este comando si el entorno de ejecución predeterminado que se está depurando no funciona lo suficientemente bien como para ejecutar el código de SOS, o bien si la versión es inferior a la 2.1.0.

Si recibió el siguiente mensaje de error al ejecutar un comando SOS, use este comando para establecer la ruta de acceso a 2.1.0 o posterior runtime de .NET.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Puede usar "dotnet --info" en un shell de comandos para buscar la ruta de acceso de un entorno de ejecución de .NET instalado.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] Habilita la compatibilidad con las descargas del servidor de símbolos.

La opción -ms habilita las descargas desde el servidor de símbolos público de Microsoft.

La opción -disable activa la compatibilidad con la descarga de símbolos.

La opción -cache<cache-path> especifica un directorio de caché de símbolos. Si no se especifica, el valor predeterminado es $HOME/.dotnet/symbolcache.

La opción -directory agrega una ruta de acceso para buscar símbolos. Puede ser más de una.

La opción -sympath agrega rutas de acceso de servidor, caché y directorio en el formato de ruta de acceso de símbolos de Windows.

La opción -log habilita el registro de las descargas de símbolos.

La opción -loadsymbols intenta descargar los símbolos nativos de .NET para el tiempo de ejecución. Es compatible con LLDB y dotnet-dump.
SOSFlush Vacía una caché de SOS interna.
SOSStatus [ -reset] Muestra el estado interno de SOS o restablece el estado de almacenamiento en caché interno.
StopOnException [-derived] [-create | -create2] <excepción><número de seudorregistro> Hace que el depurador se detenga si se inicia la excepción especificada y que continúe ejecutándose si se inician otras excepciones.

La opción -derived detecta la excepción especificada y todas las excepciones que se derivan de la misma.

Solo se admite con WinDbg.
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 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.
Threads (clrthreads) [ -live] [ -special] Muestra todos los subprocesos administrados del proceso.

El comando Threads muestra el identificador abreviado del depurador, el identificador de subproceso de CLR 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 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 (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.
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.
Token2EE<nombre de módulo><token> Convierte el token de metadatos especificado del módulo especificado en una estructura MethodTable o MethodDesc.

Se puede pasar * como parámetro de nombre de módulo para averiguar qué tiene asignado ese token en cada módulo administrado cargado. También se puede pasar el nombre del depurador para un módulo, como mscorlib o image00400000.
U [-gcinfo] [-ehinfo] [-n] <dirección de MethodDesc> | <dirección de 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 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 código fuente y los 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 de código fuente y el número de línea correspondientes. 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ños, y muestra los errores encontrados.

Los daños del montón pueden deberse a invocaciones de plataforma construidas de forma incorrecta.
VerifyObj<dirección del objeto> Comprueba el objeto que se pasa como argumento en busca de indicios de daños. Solo se admite en Windows.
VMMap Recorre el espacio de direcciones virtuales y muestra el tipo de protección aplicado a cada área. Solo se admite con WinDbg.
VMStat 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). La columna TOTAL muestra el resultado de multiplicar la columna AVERAGE por la columna BLK COUNT. Solo se admite con WinDbg.

Dotnet-Dump

Para obtener una lista de los comandos de SOS disponibles con dotnet-dump analyze, vea dotnet-dump.

Depurador de Windows

También puede usar la extensión de depuración de SOS cargandola en el depurador de WinDbg/dbg y ejecutando comandos dentro del depurador de Windows. Los comandos de SOS se pueden usar en volcados de memoria y procesos activos.

Windbg debe cargar automáticamente la extensión SOS siempre que el proceso que se depura contiene el entorno de ejecución de .NET (coreclr.dll o libcoreclr.so).

Depurador LLDB

Para obtener instrucciones sobre la configuración de SOS para LLDB, consulte dotnet-sos. Los comandos de SOS se pueden usar en volcados de memoria y procesos activos.

De forma predeterminada, puede acceder a todos los comandos de SOS escribiendo: sos [command_name]. Aunque los comandos comunes tienen un alias para que no se necesite el prefijo sos:

Get-Help Función
analyzeoom Muestra la información del último OOM que se produjo en una solicitud de asignación al montón de GC.
bpmd Crea un punto de interrupción en el método administrado especificado en el módulo indicado.
clrmodules Enumera los módulos administrados en el proceso.
clrstack Proporciona un seguimiento de pila del código administrado únicamente.
clrthreads Enumera los subprocesos administrados que se están ejecutando.
clru Muestra un desensamblado anotado de un método administrado.
dbgout Habilita o deshabilita el registro de SOS interno (-off).
dso Muestra todos los objetos administrados que se han encontrado dentro de los límites de la pila actual.
dumpalc Muestra detalles sobre un AssemblyLoadContext recopilable al que se carga el objeto especificado.
dumparray Muestra detalles sobre una matriz administrada.
dumpasync Muestra información sobre las máquinas de estados asincrónicas en el montón de recolección de elementos no utilizados.
dumpassembly Muestra detalles sobre un ensamblado.
dumpclass Muestra información sobre la estructura EEClass en la dirección especificada.
dumpconcurrentdictionary Muestra el contenido del diccionario simultáneo.
dumpconcurrentqueue Muestra el contenido de la cola simultánea.
dumpdelegate Muestra información sobre un delegado.
dumpdomain Muestra información acerca de todos los ensamblados dentro de los dominios de aplicación o el dominio especificado.
dumpgcdata Muestra información sobre los datos de GC.
dumpgen Muestra el contenido del montón para la generación especificada.
dumpheap Muestra información sobre el montón de recolección de elementos no utilizados y estadísticas de recolección de los objetos.
dumpil Muestra el lenguaje intermedio común (CIL) asociado a un método administrado.
dumplog Escribe el contenido de un registro de esfuerzo existente en memoria en el archivo especificado.
dumpmd Muestra información sobre la estructura MethodDesc en la dirección especificada.
dumpmodule Muestra información sobre el módulo en la dirección especificada.
dumpmt Muestra información sobre la tabla de métodos en la dirección especificada.
dumpobj Muestra información sobre el objeto en la dirección especificada.
dumpruntimetypes Busca todos los objetos System.RuntimeType en el montón de GC e imprime el nombre de tipo y MethodTable al que hacen referencia.
dumpsig Vuelca la firma de un método o campo especificado por <sigaddr> <moduleaddr>.
dumpsigelem Vuelca un único elemento de un objeto de firma.
dumpstack Muestra un seguimiento de pilas nativas y administradas.
dumpstackobjects Muestra todos los objetos administrados que se han encontrado dentro de los límites de la pila actual.
dumpvc Muestra información sobre los campos de una clase de valor.
eeheap Muestra información sobre la memoria de proceso que usan las estructuras de datos internas del runtime.
eestack Ejecuta el comando dumpstack en todos los subprocesos del proceso.
eeversion Muestra información sobre el tiempo de ejecución y las versiones SOS.
ehinfo Muestra los bloques de control de excepciones de un método JIT.
finalizequeue Muestra todos los objetos registrados para su finalización.
findappdomain Intenta resolver el dominio de aplicación de un objeto GC.
findroots Busca y muestra raíces de objetos en recolecciones de elementos no utilizados.
gchandles Muestra estadísticas acerca de los identificadores del recolector de elementos no utilizados existentes en el proceso.
gcheapstat Muestra estadísticas sobre el recolector de elementos no utilizados.
gcinfo Muestra la codificación JIT de recolección de elementos no utilizados para un método.
gcroot Muestra información sobre las referencias (o raíces) al objeto en la dirección especificada.
gcwhere Muestra la ubicación en el montón de recolección de elementos no utilizados de la dirección especificada.
histclear Libera los recursos usados por la familia de comandos Hist.
histinit Inicializa las estructuras SOS del registro de esfuerzo guardado en el código que se está depurando.
histobj 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.
histobjfind Muestra todas las entradas de registro que hacen referencia al objeto en la dirección especificada.
histroot Muestra información relacionada con las promociones y las reubicaciones de la raíz especificada.
histstats Muestra las estadísticas del registro de esfuerzo.
ip2md Muestra la estructura MethodDesc en la dirección especificada en el código compilado JIT.
listnearobj Muestra los objetos anteriores y posteriores a la dirección especificada.
loadsymbols Carga los símbolos del módulo nativo de .NET.
logging Habilita o deshabilita el registro de SOS interno.
name2ee Muestra las estructuras MethodTable y EEClass para el tipo o método especificado del módulo indicado.
objsize Muestra el tamaño del objeto especificado.
parallelstacks Muestra la pila de subprocesos combinados de forma similar al panel "Pilas paralelas" de Visual Studio.
pathto Muestra la ruta de acceso de GC de <root> a <target>.
pe Muestra y da formato a los campos de cualquier objeto derivado de la clase Exception en la dirección especificada.
printexception Muestra y da formato a los campos de cualquier objeto derivado de la clase Exception en la dirección especificada.
runtimes Enumera los entornos de ejecución en el destino o cambia el entorno de ejecución predeterminado.
stoponcatch El proceso de destino se interrumpirá la próxima vez que se detecte una excepción administrada durante la ejecución.
setclrpath Establece la ruta de acceso para cargar archivos .dac o .dbi de CoreCLR. setclrpath <path>.
sethostruntime Establece o muestra el directorio en tiempo de ejecución de .NET que se va a usar para ejecutar código administrado en SOS.
setsymbolserver Habilita la compatibilidad con el servidor de símbolos.
setsostid Establece el índice de subproceso o el TID del SO actual en lugar de usar los que proporciona LLDB. setsostid <tid> <index>.
sos Ejecuta varios comandos de depuración de CoreCLR. Usa la sintaxis sos <command-name> <args>. Para obtener más información, vea "soshelp".
soshelp Muestra todos los comandos disponibles cuando no se especifica ningún parámetro, o bien muestra ayuda detallada sobre el comando especificado: soshelp <command>.
syncblk Muestra la información del contenedor de SyncBlock.
taskstate Muestra un estado de tarea en un formato legible para el ser humano.
threadpool Muestra información sobre el grupo de subprocesos de runtime.
threadpoolqueue Muestra los elementos de trabajo del grupo de subprocesos en cola.
threadstate Imprime el significado de un estado de subprocesos.
timerinfo Muestra información sobre los temporizadores de ejecución.
token2ee Muestra la estructura MethodTable y la estructura MethodDesc para el token y el módulo especificados.
traverseheap Escribe información del montón en el archivo especificado, en un formato reconocido por el CLR Profiler.
verifyheap Comprueba el montón de GC para ver si hay signos de daños.
verifyobj Comprueba el objeto que se pasa como argumento en busca de indicios de daños.

Ejemplo de uso de WinDbg/cdb

Get-Help Descripción
!dumparray -start 2 -length 5 -details 00ad28d0 Muestra el contenido de una matriz en la dirección 00ad28d0. La presentación empieza en el segundo elemento e incluye cinco elementos.
!dumpassembly 1ca248 Muestra el contenido de un ensamblado en la dirección 1ca248.
!dumpheap Muestra información sobre el montón del recolector de elementos no utilizados.
!DumpLog Escribe el contenido del registro de esfuerzo en memoria en un archivo (predeterminado) denominado StressLog.txt en el directorio actual.
!dumpmd 902f40 Muestra la estructura MethodDesc en la dirección 902f40.
!dumpmodule 1caa50 Muestra información sobre un módulo en la dirección: 1caa50.
!DumpObj a79d40 Muestra información sobre un objeto en la dirección: a79d40.
!DumpVC 0090320c 00a79d9c Muestra los campos de una clase de valor en la dirección 00a79d9c usando la tabla de métodos en la dirección 0090320c.
!eeheap -gc Muestra la memoria de proceso usada por el recolector de elementos no utilizados.
!finalizequeue Muestra todos los objetos programados para su finalización.
!findappdomain 00a79d98 Determina el dominio de aplicación de un objeto en la dirección: 00a79d98.
!gcinfo 5b68dbb8 Muestra todos los identificadores del recolector de elementos no utilizados en el proceso actual.
!name2ee unittest.exe MainClass.Main Muestra las estructuras MethodTable y EEClass para el método Main en la clase MainClass del módulo unittest.exe.
!token2ee unittest.exe 02000003 Muestra información sobre el token de metadatos en la dirección 02000003 del módulo unittest.exe.

Ejemplo de uso de LLDB

Get-Help Descripción
dumparray -start 2 -length 5 -details 00ad28d0 Muestra el contenido de una matriz en la dirección 00ad28d0. La presentación empieza en el segundo elemento e incluye cinco elementos.
dumpassembly 1ca248 Muestra el contenido de un ensamblado en la dirección 1ca248.
dumpheap Muestra información sobre el montón del recolector de elementos no utilizados.
dumplog Escribe el contenido del registro de esfuerzo en memoria en un archivo (predeterminado) denominado StressLog.txt en el directorio actual.
dumpmd 902f40 Muestra la estructura MethodDesc en la dirección 902f40.
dumpmodule 1caa50 Muestra información sobre un módulo en la dirección: 1caa50.
dumpobj a79d40 Muestra información sobre un objeto en la dirección: a79d40.
dumpvc 0090320c 00a79d9c Muestra los campos de una clase de valor en la dirección 00a79d9c usando la tabla de métodos en la dirección 0090320c.
eeheap -gc Muestra la memoria de proceso usada por el recolector de elementos no utilizados.
findappdomain 00a79d98 Determina el dominio de aplicación de un objeto en la dirección: 00a79d98.
gcinfo 5b68dbb8 Muestra todos los identificadores del recolector de elementos no utilizados en el proceso actual.
name2ee unittest.exe MainClass.Main Muestra las estructuras MethodTable y EEClass para el método Main en la clase MainClass del módulo unittest.exe.
token2ee unittest.exe 02000003 Muestra información sobre el token de metadatos en la dirección 02000003 del módulo unittest.exe.
clrthreads Muestra los subprocesos administrados.

Consulte también