Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo se aplica a: ✔️ dotnet-debug versión 0.0.710501 y versiones posteriores
Nota:
dotnet-debug actualmente solo admite aplicaciones basadas en CoreCLR y no se admite actualmente en macOS.
Install
Para instalar la versión de lanzamiento más reciente del dotnet-debug de , use el comando dotnet tool install:
dotnet tool install --global dotnet-debug
Sinopsis
dotnet-debug [-h|--help] [--version] <command>
Description
La dotnet-debug herramienta global le permite asociar a procesos de .NET dinámicos y analizar archivos de volcado de memoria de forma interactiva. A diferencia dotnet-dumpde , que se centra en la recolección de volcados y el análisis sin conexión, dotnet-debug está diseñado para la inspección de procesos activos. Admite todos los mismos comandos de depuración de SOS que dotnet-dump.
Esta herramienta es útil en plataformas como Alpine Linux en las que un trabajo lldb completo no está disponible. La dotnet-debug herramienta ejecuta comandos SOS para analizar el estado administrado y el diagnóstico del montón, pero no es un depurador nativo, por lo que no se admite la visualización de marcos de pila nativos.
Options
--versionMuestra la versión de la utilidad dotnet-debug.
-h|--helpMuestra la ayuda de la línea de comandos.
Commands
| Command |
|---|
| dotnet-debug attach |
| dotnet-debug open-dump |
dotnet-debug attach
Se asocia a un proceso activo e inicia un shell interactivo con comandos de depuración para explorarlo.
Sinopsis
dotnet-debug attach <process-id> [-c|--commands <debug_command>] [--accept-license-agreement]
Arguments
<process-id>Identificador de proceso al que se va a asociar y analizar.
Options
-c|--commands <debug_command>Ejecuta los comandos al iniciar. Se pueden usar varias instancias de este parámetro en una invocación para encadenar comandos. Los comandos se ejecutan en el orden en que se proporcionan en la línea de comandos. Si desea
dotnet-debugsalir después de los comandos, el último comando debe serexit.--accept-license-agreementAcepta el contrato de licencia sin preguntar.
Example
Adjunte a un proceso en ejecución con el identificador 1234:
$ dotnet-debug attach 1234
Attaching to process: 1234 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Ejecute un comando en attach y, a continuación, salga de:
dotnet-debug attach 1234 -c clrstack -c exit
dotnet-debug open-dump
Inicia un shell interactivo con comandos de depuración para explorar un archivo de volcado de memoria.
Sinopsis
dotnet-debug open-dump <dump_path> [-c|--commands] [--accept-license-agreement]
Arguments
<dump_path>Ruta de acceso al archivo de volcado de memoria que se va a analizar.
Options
-c|--commands <debug_command>Ejecuta los comandos al iniciar. Se pueden usar varias instancias de este parámetro en una invocación para encadenar comandos. Los comandos se ejecutan en el orden en que se proporcionan en la línea de comandos. Si desea
dotnet-debugsalir después de los comandos, el último comando debe serexit.--accept-license-agreementAcepta el contrato de licencia sin preguntar.
Example
Abra y analice un archivo de volcado de memoria:
$ dotnet-debug open-dump ./core_20260209_135837
Loading dump: ./core_20260209_135837 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Depuración de comandos SOS
attach Los comandos y open-dump muestran una sesión interactiva que acepta los siguientes comandos SOS.
| Command | Función |
|---|---|
analyzeoom |
Muestra la información del último OOM que se produjo en una solicitud de asignación al montón de GC. |
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. |
d o readmemory |
Vuelca el contenido de la memoria. |
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. |
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. |
exit o quit |
Sale del modo interactivo. |
finalizequeue |
Muestra todos los objetos registrados para su finalización. |
findappdomain |
Intenta resolver el dominio de aplicación de un objeto GC. |
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 podrían 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 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. |
logopen |
Habilita el registro de archivos de la consola. |
logclose |
Deshabilita el registro de archivos de la consola. |
logging |
Habilita o deshabilita el registro de SOS interno. |
lm o modules |
Muestra los módulos nativos del proceso. |
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 o printexception |
Muestra y da formato a los campos de cualquier objeto derivado de la clase Exception en la dirección especificada. |
r o registers |
Muestra los registros del subproceso. |
runtimes |
Enumera los runtimes en el destino o cambia el runtime predeterminado. |
setclrpath |
Establece la ruta de acceso para cargar archivos dac o dbi de CoreCLR mediante setclrpath <path>. |
setsymbolserver |
Habilita la compatibilidad con el servidor de símbolos. |
sos |
Ejecuta varios comandos de depuración de CoreCLR. Usa la sintaxis sos <command-name> <args>. Para obtener más información, use soshelp. |
soshelp o help |
Muestra todos los comandos disponibles. |
soshelp <command> o help <command> |
Muestra el comando especificado. |
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. |
threads <threadid> o setthread <threadid> |
Establece o muestra el identificador del subproceso actual para los comandos SOS. |
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. |
Nota:
Para obtener más información, consulte Extensión de depuración de SOS para .NET.
Uso dotnet-debug para adjuntar a un proceso en directo
En el ejemplo siguiente se muestra cómo asociar a un proceso de .NET en ejecución e investigar un problema del grupo de subprocesos:
$ dotnet-debug attach 1902
Attaching to process: 1902 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Esta acción abre una sesión interactiva que acepta comandos como los siguientes:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String)
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String)
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String)
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[])
Para ver una excepción no controlada:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d
StackTraceString: <none>
HResult: 80131604
dotnet-debug frente a dotnet-dump
dotnet-debug y dotnet-dump comparten los mismos comandos de depuración de SOS, pero sirven para fines principales diferentes:
| Característica | dotnet-debug |
dotnet-dump |
|---|---|---|
| Asociación a un proceso activo | ✔️ | ❌ |
| Recopilación de volcados de memoria | ❌ | ✔️ |
| Análisis de archivos de volcado de memoria | ✔️ | ✔️ |
Enumeración de procesos de .NET (ps) |
❌ | ✔️ |
Use dotnet-debug cuando necesite depurar un proceso activo de forma interactiva. Use dotnet-dump cuando necesite recopilar volcados de memoria o analizarlos sin conexión.