Extensiones del depurador de .NET
Las extensiones del depurador de .NET le permiten 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. Las extensiones están preinstaladas con Windbgy se pueden descargar para su uso con LLDB. Puede usar las extensiones del depurador de .NET para:
- Recopile información sobre el montón administrado.
- Busque daños en el montón.
- Muestra 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 tiempo de ejecución.
Las extensiones del depurador de .NET incluyen comandos de la herramienta dotnet-sos
Sintaxis
Bajo windbg: ![command] [options]
En LLDB: 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 en Ayuda o soshelp. La ayuda de comandos individuales está disponible mediante soshelp <command>
.
Mandar | Descripción |
---|---|
bpmd [-nofuturemodule] [<nombre del módulo><nombre del método>] [-md<MethodDesc >] -list-clear<número de punto de interrupción pendiente>-clearall |
Crea un punto de interrupción en el método especificado en el módulo especificado. Si no se ha cargado el módulo y el método especificados, este comando espera una notificación de que el módulo se cargó y just-in-time (JIT) compilado antes de crear un punto de interrupción. Puede administrar la lista de puntos de interrupción pendientes mediante las opciones de -list, -cleary -clearall opciones: La opción -list genera una lista de todos los puntos de interrupción pendientes. Si un punto de interrupción pendiente tiene un identificador de módulo distinto de cero, ese 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 cero, ese punto de interrupción se aplica a los módulos que aún no se han cargado. 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 solo un seguimiento de pila de código administrado. La opción -p muestra argumentos para la función administrada. La opción -l muestra información sobre variables locales en un marco. Las extensiones del depurador de .NET no pueden recuperar nombres locales, por lo que la salida de los nombres locales tiene el formato <dirección local>=<valor>. La opción -a es un acceso directo para -l y -p combinados. La opción -n deshabilita la presentación de nombres de archivo de origen y números de línea. Si el depurador tiene la opción SYMOPT_LOAD_LINES especificada, SOS busca los símbolos de cada fotograma administrado y, si se ejecuta correctamente, muestra el nombre de archivo de origen y el número de línea correspondientes. Se puede especificar el parámetro -n (sin números de línea) para deshabilitar este comportamiento. La opción -f (modo completo) muestra los fotogramas nativos que los mezclan con los marcos administrados y el nombre del ensamblado y el desplazamiento de función para los fotogramas administrados. Esta opción no muestra fotogramas nativos cuando se usa con dotnet-dump .La opción -r volca los registros de cada fotograma de pila. La opción -all volca las pilas de todos los 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<length>] [-details] [-nofields] <dirección del objeto de matriz> -o- DA [-start<startIndex>] [-length<length>] [-details] [-nofields] dirección del objeto de matriz> |
Examina los elementos de un objeto de matriz. La opción -start especifica el índice inicial en el que se van a mostrar los elementos. La opción -length especifica cuántos elementos se van a mostrar. La opción La opción -nofields impide que se muestren matrices. Esta opción solo está disponible cuando se especifica la opción -details. |
dumpAsync (dumpasync) [-mt<MethodTable address>] [-type<nombre de tipo parcial>] [-waiting] [-root] | DumpAsync recorre el montón recopilado por elementos no utilizados y busca objetos que representan máquinas de estado asincrónicas tal como se crean cuando se transfiere el estado de un método asincrónico al montón. Este comando reconoce las máquinas de estado 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 estado asincrónico encontrado. Estos detalles incluyen: : línea para el tipo del objeto de máquina de estado asincrónico, incluida su dirección MethodTable, su dirección de objeto, su tamaño y su nombre de tipo. : línea para el nombre del tipo de máquina de estado tal como se encuentra en el objeto . : lista de cada campo de la máquina de estado. - Una línea para una continuación de este objeto de máquina de estado, si se ha registrado uno o varios. - Se detectaron raíces de GC para este objeto de máquina de estado asincrónico. Compatible con aplicaciones AOT nativas. |
Muestra información sobre un ensamblado. El comando DumpAssembly enumera varios módulos, si existen. Puede obtener una dirección de ensamblado mediante el comando DumpDomain. |
|
Muestra información sobre la estructura de EEClass asociada a un tipo.El comando Use el |
|
dumpDomain [<dirección de dominio>] | Enumera cada objeto Assembly que se carga dentro de la dirección de objeto AppDomain especificada. Cuando se llama sin parámetros, el comando DumpDomain enumera todos los objetos AppDomain de un proceso. Puesto que .NET (Core) solo tiene una AppDomain, DumpDomain solo devuelve un objeto . |
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<nombre de tipo parcial>] [start [end]] | Muestra información sobre el montón y las estadísticas de recolección de elementos no utilizados sobre 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 restringe la salida al resumen de tipos estadísticos. La opción -strings restringe la salida a un resumen de valores estadísticos de cadena. La opción -short limita la salida a solo la dirección de cada objeto. Este comando permite canalizar fácilmente la salida del comando a otro comando del depurador para la automatización. La opción -min omite los objetos que son inferiores al parámetro size , especificados en bytes.La opción -max omite los objetos que son mayores que el parámetro size , especificados en bytes.La opción -thinlock informa de ThinLocks. Para obtener más información, consulte el comando La opción -startAtLowerBound obliga al recorrido del montón a comenzar en el límite inferior de un intervalo de direcciones proporcionado. Durante la fase de planeación, el montón a menudo no se puede recorrer porque se mueven los objetos. Esta opción obliga a dumpHeap a comenzar su recorrido en el límite inferior especificado. Debe proporcionar la dirección de un objeto válido como límite inferior para que esta opción funcione. Puede mostrar la memoria en la dirección de un objeto incorrecto para buscar manualmente la siguiente tabla de métodos. Si la recolección de elementos no utilizados está actualmente en una llamada a memcopy , también puede encontrar la dirección del siguiente objeto agregando el tamaño a la dirección de inicio, que se proporciona como parámetro.La opción -mt muestra solo los objetos que corresponden a la estructura MethodTable especificada.La opción -type enumera solo los objetos cuyo nombre de tipo es una coincidencia de subcadena de la cadena especificada. El parámetro start comienza a enumerar desde la dirección especificada.El parámetro end deja de enumerar en la dirección especificada.Compatible con aplicaciones AOT nativas. |
DumpIL<objeto DynamicMethod administrado> | <> de puntero DynamicMethodDesc | <> de puntero 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. |
DumpLock [--allthreads] [--waits] | Muestra información sobre los objetos System.Threading.Lock, como los que mantienen los subprocesos (valor predeterminado) o los que los subprocesos esperan. |
DumpLog [-addr<addressOfStressLog>] [<Filename>] | Escribe el contenido de un registro de esfuerzo en memoria en el archivo especificado. Si no especifica un nombre, este comando crea un archivo denominado StressLog.txt en el directorio actual. El registro de estrés en memoria le ayuda a diagnosticar errores de estrés sin usar bloqueos o 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 opcional -addr permite especificar un registro de esfuerzo distinto del registro predeterminado.Compatible con aplicaciones AOT nativas. |
DumpMD<MethodDesc address> | Muestra información sobre una estructura de MethodDesc en la dirección especificada.Puede usar el comando IP2MD para obtener la dirección de estructura de MethodDesc de una función administrada. |
DumpMT [-MD] <MethodTable address> | Muestra información sobre una tabla de métodos en la dirección especificada. Al especificar la opción -MD se muestra una lista de todos los métodos definidos con el objeto . Cada objeto administrado contiene un puntero de 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 hace referencia el módulo. Puede usar el comando DumpDomain o DumpAssembly para recuperar la dirección de un módulo. |
DumpObj [-nofields] <dirección de objeto> -o- |
Muestra información sobre un objeto en la dirección especificada. El comando DumpObj muestra los campos, la información de 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 se muestren campos del objeto, resulta útil para objetos como String. |
dumpRuntimeTypes | Muestra los objetos de tipo en tiempo de ejecución en el montón del recolector de elementos no utilizados y enumera sus nombres de tipo asociados y tablas de métodos. |
Muestra un seguimiento de pila. La opción top y bottom para limitar los marcos de pila mostrados en plataformas x86.La opción -n deshabilita la presentación de nombres de archivo de origen y números de línea. Si el depurador tiene la opción SYMOPT_LOAD_LINES especificada, SOS buscará los símbolos de cada fotograma administrado y, si se ejecuta correctamente, se mostrará el nombre de archivo de origen y el número de línea correspondientes. Se puede especificar el parámetro -n (sin números de línea) para deshabilitar este comportamiento. |
|
dumpSig<sigaddr><moduleaddr> | Muestra información sobre una estructura de 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, debe usar DumpSig para examinar 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 de ella. |
DumpStackObjects [-verify] [top stack [bottom stack]]-o- DSO [-verify] [ top stack [bottom stack]] |
Muestra todos los objetos administrados que se encuentran dentro de los límites de la pila actual. La opción -verify valida cada campo de 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 variables y parámetros 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 |
EEHeap [-gc] [-loader] | Muestra información sobre la memoria de proceso consumida por estructuras de datos en tiempo de ejecución internas. Las opciones de -gc y -loader limitan la salida de este comando a estructuras de datos del recolector de elementos no utilizados o del cargador. La información del recolector de elementos no utilizados enumera los intervalos de cada segmento del montón administrado. Si el puntero está dentro de un intervalo de segmentos proporcionado por -gc, el puntero es un puntero de objeto. |
EEStack [-short] [-EE] | Ejecuta el comando DumpStack en todos los subprocesos del proceso. La opción Subprocesos que han tomado un bloqueo. Subprocesos que se han detenido para permitir una recolección de elementos no utilizados. Subprocesos que se encuentran actualmente en código administrado. |
EHInfo [<MethodDesc address>] [<Code address>] | Muestra los bloques de control de excepciones en un método especificado. Este comando muestra las direcciones de código y los desplazamientos del bloque de cláusulas (el bloque try ) y el bloque de controlador (el bloque catch ). |
de preguntas más frecuentes de |
Muestra las preguntas más frecuentes. No se admite en dotnet-dump . |
FinalizeQueue [-detail] | [-allReady] [-short] | Muestra todos los objetos registrados para la finalización. La opción -detail muestra información adicional sobre los SyncBlocks que se deben limpiar y los RuntimeCallableWrappers (RCW) que esperan la limpieza. Ambas estructuras de datos se almacenan en caché y se limpian mediante el subproceso del finalizador cuando se ejecuta.La opción -allReady muestra todos los objetos que están listos para la finalización, independientemente de si ya están marcados por la recolección de elementos no utilizados como tal, o se marcarán con la siguiente recolección de elementos no utilizados. Los objetos que se encuentran en la lista "listos para finalizar" son objetos finalizables que ya no están rooteados. Esta opción puede ser costosa, ya que comprueba si todos los objetos de las colas finalizables siguen teniendo raíz.La opción -short limita la salida a la dirección de cada objeto. Si se usa en con -allReady, enumera todos los objetos que tienen un finalizador que ya no están rooteados. Si se usa de forma independiente, enumera todos los objetos de las colas finalizables y "listas para finalizar". |
dirección de objeto<FindAppDomain> | Determina el dominio de aplicación de un objeto en la dirección especificada. |
FindRoots-gen<N> | -gen any |<> de dirección de objeto | Hace que el depurador se interrumpa en el depurador en la siguiente colección de la generación especificada. El efecto se restablece en cuanto se produce la interrupción. Para interrumpir en la siguiente colección, debe volver a emitir el comando. La dirección del objeto |
GCHandles [-perdomain] | Muestra estadísticas sobre los identificadores del recolector de elementos no utilizados en el proceso. La opción -perdomain organiza las estadísticas por dominio de aplicación. Use el comando GCHandles para buscar fugas de memoria causadas por fugas de identificadores de recolección de elementos no utilizados. Por ejemplo, una pérdida de memoria se produce cuando el código conserva una matriz grande porque un controlador de elementos no utilizados seguro sigue apuntando a ella y el identificador se descarta sin liberarlo. Solo se admite en Windows. |
GCHandleHandleHandleHub | Busca memoria para las referencias a identificadores de recolector de elementos no utilizados seguros y anclados en el proceso y muestra los resultados. Si se encuentra un identificador, el comando GCHandleShell muestra la dirección de la referencia. Si no se encuentra un identificador en la memoria, este comando muestra una notificación. Solo se admite en Windows. |
dirección GCInfo<MethodDesc><Dirección de código> | Muestra los datos que indican cuándo los registros o las ubicaciones de pila contienen objetos administrados. Si se produce una recolección de elementos no utilizados, el recolector debe conocer las ubicaciones de referencias a objetos para que pueda actualizarlas con nuevos valores de puntero de objeto. |
GCRoot [-nostacks] [-all] <> | Muestra información sobre las referencias (o raíces) a un objeto en la dirección especificada. El comando GCRoot examina todo el montón administrado y la tabla de identificadores para los identificadores dentro de otros objetos y identificadores de la pila. A continuación, cada pila se busca punteros a objetos y también se busca la cola del finalizador. Este comando no determina si una raíz de pila es válida o se descarta. Use los comandos clrstack y U para desensamblar el marco al que pertenece el valor local o del argumento para determinar si la raíz de la pila todavía está en uso. La opción -nostacks restringe la búsqueda a identificadores de recolector de elementos no utilizados y objetos accesibles. La opción -all obliga a mostrar todas las raíces en lugar de solo las raíces únicas. |
GCWhere<dirección de objeto> | Muestra la ubicación y el tamaño del montón de recolección de elementos no utilizados del argumento pasado. Cuando el argumento se encuentra 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 ] |
Muestra todos los comandos disponibles cuando no se especifica ningún parámetro o muestra información de ayuda detallada sobre el 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 libre total de cada generación en 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 está raíz. Solo se admite en Windows. |
HistClear | Libera los recursos utilizados por la familia de comandos de Hist .Por lo general, no es necesario llamar explícitamente a HistClear , ya que cada HistInit limpia los recursos anteriores. |
histInit | Inicializa las estructuras SOS del registro de esfuerzo guardados en el depurado. |
histObj<obj_address> | Examina todos los registros de reubicación del registro de estrés y muestra la cadena de reubicaciones de recolección de elementos no utilizados que pueden haber llevado a la dirección pasada como argumento. |
HistObjFind<obj_address> | Muestra todas las entradas de registro que hacen referencia a un objeto en la dirección especificada. |
Muestra información relacionada con las promociones y reubicaciones de la raíz especificada. El valor raíz se puede usar para realizar un 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 que se ha compilado JIT. |
|
Muestra los objetos anteriores y después de la dirección especificada. El comando busca la dirección del montón de recolección de elementos no utilizados que tiene un aspecto similar a un principio válido de un objeto administrado (basado 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] | Impide la ejecución de comandos no seguros al usar un minivolcado. Pase 0 para deshabilitar esta característica o 1 para habilitar esta característica. De forma predeterminada, el valor de minidumpMode se establece en 0. Los minivolcados creados con el comando .dump /m Solo se admite con Windbg. |
nombre2EE (nombre2ee) <nombre del módulo><tipo o nombre de método> -o- Nombre2EE<nombre del módulo>!<tipo o nombre de método> |
Muestra la estructura MethodTable y EEClass estructura del tipo o método especificados en el módulo especificado.El módulo especificado debe cargarse en el proceso. Para obtener el nombre de tipo adecuado, examine el módulo mediante el Ildasm.exe (Desensamblador de IL). También puede pasar * como parámetro de nombre del módulo para buscar en todos los módulos administrados cargados. El nombre del módulo parámetro también puede ser el nombre del depurador para un módulo, como mscorlib o image00400000 .Este comando admite la sintaxis del depurador de Windows de < module >! <type >. El tipo debe estar completo. |
ObjSize [<dirección de objeto>] | [-aggregate] [-stat] | Muestra el tamaño del objeto especificado. Si no especifica ningún parámetro, el comando ObjSize muestra el tamaño de todos los objetos encontrados en subprocesos administrados, muestra todos los identificadores del recolector de elementos no utilizados en el proceso y el tamaño de los objetos a los que apunta esos identificadores. El comando ObjSize incluye el tamaño de todos los objetos secundarios además del elemento primario. La opción -aggregate se puede usar con el argumento -stat para obtener una vista detallada de los tipos que todavía están rooteados. Mediante el uso de !dumpheap -stat y !objsize -aggregate -stat, puede determinar qué objetos ya no están rooteados y diagnosticar varios problemas de memoria. Solo se admite en Windows. |
PrintException [anidado ] [-lines] [<dirección del objeto Exception>] -o- PE [anidado ] [<dirección del objeto Exception>] |
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 que se produce en el subproceso actual. La opción anidada muestra detalles sobre 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 para el proceso, el tiempo de CPU del kernel y las estadísticas de uso de memoria. Solo se admite con Windbg. |
dirección RCWCleanupList<RCWCleanupList> | Muestra la lista de contenedores invocables en tiempo de ejecución en la dirección especificada que está esperando la limpieza. Solo se admite con Windbg. |
dirección base<SaveModule><Nombre de archivo> | Escribe una imagen, que se carga en la memoria en la dirección especificada, en el archivo especificado. 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). El entorno de ejecución debe ser al menos la versión 2.1.0 o posterior. Si hay espacios en el directorio, debe estar entre 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. El valor predeterminado es usar el mismo runtime (libcoreclr) que se está depurando. Use este comando si el entorno de ejecución predeterminado que se está depurando no funciona lo suficiente para ejecutar el código SOS o si la versión es inferior a 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>] [-simpatizar<windows-symbol-path>] [<symbol-server-URL>] | Habilita la compatibilidad con la descarga del servidor de símbolos. La opción -ms habilita la descarga 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. El valor predeterminado es $HOME/.dotnet/symbolcache si no se especifica. La opción -directory agrega una ruta de acceso para buscar símbolos. Puede ser más de uno. 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 descarga de símbolos. La opción -loadsymbols intenta descargar los símbolos nativos de .NET para el tiempo de ejecución. Se admite en lldb y dotnet-dump. |
SOSFlush | Vacía una caché interna de SOS. |
SOSStatus [-reset] | Muestra el estado interno de SOS o restablece el estado almacenado en caché interno. |
StopOnException [-derived] [-create | -create2] <Exception><Pseudo-register number> | Hace que el depurador se detenga cuando se produzca la excepción especificada, pero siga ejecutándose cuando se produzcan otras excepciones. La opción derivada de detecta la excepción especificada y todas las excepciones que derivan de la excepción especificada. Solo se admite con Windbg. |
syncBlk [-all | <número de sincronización>] | Muestra la estructura de SyncBlock especificada o todas las estructuras SyncBlock . Si no pasa ningún argumento, el comando SyncBlk muestra la estructura de SyncBlock correspondiente a los objetos que pertenecen a un subproceso.Una estructura SyncBlock es un contenedor para obtener 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 para operaciones seguras para subprocesos. |
threadPool | Muestra información sobre el grupo de subprocesos administrados, incluido el número de solicitudes de trabajo en la cola, el número de subprocesos de puerto de finalización y el número de temporizadores. |
subprocesos (clrthreads) [-live] [-special] | Muestra todos los subprocesos administrados en el proceso. El comando Threads muestra el identificador abreviado del depurador, el identificador de subproceso clR y el identificador de subproceso del sistema operativo. Además, el comando Subprocesos muestra una columna Dominio que indica el dominio de aplicación en el que se ejecuta un subproceso, una columna APT que muestra el modo de apartamento COM y una columna Excepción que muestra la última excepción iniciada en el subproceso. La opción -live muestra los subprocesos asociados a un subproceso activo. La opción -special muestra todos los subprocesos especiales creados por CLR. Los subprocesos especiales incluyen subprocesos de recolección de elementos no utilizados (en la recolección simultánea y de elementos no utilizados del servidor), subprocesos auxiliares del depurador, subprocesos de finalizador, AppDomain descarga de subprocesos y subprocesos del temporizador del grupo de subprocesos. Compatible con aplicaciones AOT nativas. |
Muestra el estado del subproceso. El parámetro value es el valor del campo State del Subprocesos salida del informe. |
|
Convierte el token de metadatos especificado en el módulo especificado en una estructura de MethodTable o MethodDesc estructura.Puede pasar * para el parámetro de nombre del módulo para buscar a qué se asigna ese token en cada módulo administrado cargado. También puede pasar el nombre del depurador para un módulo, como mscorlib o image00400000 . |
|
Muestra un desensamblaje anotado de un método administrado especificado por un puntero de estructura MethodDesc para el método o por 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 anotaciones que convierten tokens de metadatos en nombres.La opción -gcinfo hace que el comando U muestre la estructura de GCInfo para el método .La opción -ehinfo muestra información de excepción para el método . También puede obtener esta información con el comando EHInfo. La opción -n deshabilita la presentación de nombres de archivo de origen y números de línea. Si el depurador tiene la opción SYMOPT_LOAD_LINES especificada, SOS busca los símbolos de cada fotograma administrado y, si se ejecuta correctamente, muestra el nombre de archivo de origen 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 para detectar signos de daños y muestra los errores encontrados. Los daños en el montón pueden deberse a llamadas de invocación de plataforma que se construyen incorrectamente. Compatible con aplicaciones AOT nativas. |
verifyObj<dirección de objeto> | Comprueba el objeto que se pasa como argumento para detectar signos 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 región. Solo se admite con Windbg. |
vmStat | Proporciona una vista de resumen del espacio de direcciones virtual, ordenado por cada tipo de protección aplicada a esa memoria (libre, reservada, confirmada, privada, asignada, imagen). La columna TOTAL muestra el resultado de la columna AVERAGE multiplicada por la columna BLK COUNT. Solo se admite con Windbg. |
Depurador de Windows
También puede usar las extensiones del depurador de .NET cargando en el depurador de WinDbg/dbg y ejecutando comandos dentro del depurador de Windows. Los comandos se pueden usar en procesos dinámicos o volcados de memoria.
Windbg debe cargar la extensión automáticamente cada vez que el proceso que se depura contiene el entorno de ejecución de .NET (coreclr.dll o libcoreclr.so).
Depurador de LLDB
Para obtener instrucciones sobre cómo configurar las extensiones del depurador de .NET para LLDB, consulte dotnet-debugger-extensions. Los comandos se pueden usar en procesos dinámicos o volcados de memoria.
De forma predeterminada, puede acceder a todos los comandos escribiendo: sos [command_name]
. Sin embargo, los comandos comunes se han alias para que no necesite el prefijo sos
:
Mandar | 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 especificado. |
clrmodules |
Enumera los módulos administrados en el proceso. |
clrstack |
Proporciona solo un seguimiento de pila de código administrado. |
clrthreads |
Enumera los subprocesos administrados que se ejecutan. |
clru |
Muestra un desensamblaje anotado de un método administrado. |
dbgout |
Habilita o deshabilita (-off ) registro interno de SOS. |
dso |
Muestra todos los objetos administrados que se encuentran 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 estado asincrónicas en el montón recolector de elementos no utilizados. |
dumpassembly |
Muestra detalles sobre un ensamblado. |
dumpclass |
Muestra información sobre la estructura de 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 sobre todos los ensamblados dentro de todos los appDomains o el 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 y las estadísticas de recolección de elementos no utilizados sobre los objetos. |
dumpil |
Muestra el lenguaje intermedio común (CIL) asociado a un método administrado. |
dumplock |
Muestra información sobre los objetos System.Threading.Lock, como los que mantienen los subprocesos (valor predeterminado) o los que los subprocesos esperan. Este comando solo está disponible en extensiones del depurador de .NET. |
dumplog |
Escribe el contenido de un registro de esfuerzo en memoria en el archivo especificado. |
dumpmd |
Muestra información sobre la estructura de 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 que hacen referencia también. |
dumpsig |
Volca la firma de un método o campo especificado por <sigaddr> <moduleaddr> . |
dumpsigelem |
Volca un único elemento de un objeto de firma. |
dumpstack |
Muestra un seguimiento de pila nativo y administrado. |
dumpstackobjects |
Muestra todos los objetos administrados que se encuentran 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 consumida por estructuras de datos en tiempo de ejecución internas. |
eestack |
Ejecuta dumpstack en todos los subprocesos del proceso. |
eeversion |
Muestra información sobre el entorno de ejecución y las versiones de SOS. |
ehinfo |
Muestra los bloques de control de excepciones en un método JIT-ed. |
finalizequeue |
Muestra todos los objetos registrados para la finalización. |
findappdomain |
Intenta resolver el AppDomain de un objeto GC. |
findroots |
Busca y muestra las raíces de objetos en colecciones de GC. |
gchandles |
Muestra estadísticas sobre los identificadores del recolector de elementos no utilizados en el proceso. |
gcheapstat |
Muestra estadísticas sobre el recolector de elementos no utilizados. |
gcinfo |
Muestra la codificación DE GC JIT 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 GC de la dirección especificada. |
histclear |
Libera los recursos utilizados por la familia de comandos hist. |
histinit |
Inicializa las estructuras SOS del registro de esfuerzo guardados en el depurado. |
histobj |
Examina todos los registros de reubicación del registro de estrés y muestra la cadena de reubicaciones de recolección de elementos no utilizados que pueden haber llevado a la dirección pasada 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 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 que se ha compilado JIT. |
listnearobj |
Muestra el objeto anterior y correcto la dirección especificada. |
loadsymbols |
Carga los símbolos del módulo nativo de .NET. |
logging |
Habilita o deshabilita el registro interno de SOS. |
name2ee |
Muestra las estructuras MethodTable y EEClass para el tipo o método especificados en el módulo especificado. |
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 tiempo de ejecución predeterminado. |
stoponcatch |
El proceso de destino 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 coreclr dac/dbi.
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 actual de tid/thread del sistema operativo en lugar de usar el que proporciona LLDB.
setsostid <tid> <index> . |
sos |
Ejecuta varios comandos de depuración de Coreclr. Use 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 muestra información de ayuda detallada sobre el comando especificado: soshelp <command> . |
syncblk |
Muestra la información del titular syncBlock. |
taskstate |
Muestra un estado de tarea en un formato legible. |
threadpool |
Muestra información sobre el grupo de subprocesos en tiempo de ejecución. |
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 en ejecución. |
token2ee |
Muestra la estructura MethodTable y la estructura MethodDesc para el token y el módulo especificados. |
traverseheap |
Escribe la información del montón en un archivo en un formato comprendido por 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 para detectar signos de daños. |
Uso de ejemplo de Windbg/cdb
Mandar | Descripción |
---|---|
!dumparray -start 2 -length 5 -details 00ad28d0 |
Muestra el contenido de una matriz en la dirección 00ad28d0 . La presentación comienza desde el segundo elemento y continúa para 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 de 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 mediante la tabla de métodos de la dirección 0090320c . |
!eeheap -gc |
Muestra la memoria del proceso usada por el recolector de elementos no utilizados. |
!finalizequeue |
Muestra todos los objetos programados para la 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 de MethodTable y EEClass para el método Main de 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 . |
Uso de ejemplo de LLDB
Mandar | Descripción |
---|---|
dumparray -start 2 -length 5 -details 00ad28d0 |
Muestra el contenido de una matriz en la dirección 00ad28d0 . La presentación comienza desde el segundo elemento y continúa para 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 de 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 mediante la tabla de métodos de la dirección 0090320c . |
eeheap -gc |
Muestra la memoria del 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 de MethodTable y EEClass para el método Main de 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
- Introducción a los volcados de memoria de .NET
- Aprenda a depurar una pérdida de memoria en .NET
- blog recopilación y análisis de volcados de memoria
- herramienta de análisis de volcado de memoria (dotnet-dump)
- instalador de extensiones del depurador de .NET (dotnet-debugger-extensions)
- herramienta de análisis de montón (dotnet-gcdump)