Cursos
Ruta de aprendizaje
Depuración de aplicaciones de consola de C# (Introducción a C#, parte 6) - Training
Depuración de aplicaciones de consola de C# (Introducción a C#, parte 6)
Este explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Este artículo se aplica a: ✔️ dotnet-stack
versión 5.0.221401 y posteriores
Hay dos maneras de descargar e instalar dotnet-stack
:
Herramienta global dotnet:
Para instalar la versión de lanzamiento más reciente del paquete NuGet de dotnet-stack
, use el comando dotnet tool install:
dotnet tool install --global dotnet-stack
Descarga directa:
descargue el archivo ejecutable de la herramienta que coincida con la plataforma:
dotnet-stack [-h, --help] [--version] <command>
La herramienta dotnet-stack
:
EventPipe
que proporciona el entorno de ejecución de .NET Core.-h|--help
Muestra la ayuda de la línea de comandos.
--version
Muestra la versión de la utilidad dotnet-stack.
Command | Descripción |
---|---|
dotnet-stack report | Imprime el seguimiento de la pila para cada subproceso del proceso de destino. |
dotnet-stack ps | Enumera los procesos de dotnet de los que se pueden recopilar seguimientos de la pila. |
dotnet-stack symbolicate | Obtenga el número de línea del token de método y el desplazamiento IL en un seguimiento de pila. |
Imprime el seguimiento de la pila para cada subproceso del proceso de destino.
dotnet-stack report -p|--process-id <pid>
-n|--name <process-name>
[-h|--help]
-n, --name <name>
Nombre del proceso desde el que se va a notificar la pila.
-p|--process-id <PID>
Id. de proceso desde el que se va a notificar la pila.
Enumera los procesos de dotnet de los que se pueden recopilar seguimientos de la pila.
dotnet-stack
, versión 6.0.320703 y posteriores, también muestra los argumentos de la línea de comandos con los que se ha iniciado cada proceso, si está disponible.
dotnet-stack ps [-h|--help]
Imagine que inicia una aplicación de ejecución prolongada con el comando dotnet run --configuration Release
. En otra ventana ejecuta el comando dotnet-stack ps
. La salida que se ve es la siguiente. Los argumentos de la línea de comandos, si los hay, se muestran en dotnet-stack
versión 6.0.320703 y posteriores.
> dotnet-stack ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Obtenga el número de línea del token de método y el desplazamiento IL en un seguimiento de pila.
dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]
-d, --search-dir <directory1 directory2 ...>
Ruta de acceso de varios directorios con ensamblado y pdb.
-o, --output <output-path>
Salida directa a un archivo.
-c, --stdout
Salida directa a una consola.
> cat stack.trace
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at DotnetStackSymbolicate.App.MethodA() in DotnetStackSymbolicate.dll:token 0x6000002+0x6
at DotnetStackSymbolicate.App..ctor() in DotnetStackSymbolicate.dll:token 0x6000003+0x51
at DotnetStackSymbolicate.Program.OnCreate() in DotnetStackSymbolicate.Tizen.dll:token 0x6000001+0x8
onSigabrt called
>
> dotnet-stack symbolicate stack.trace --stdout
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at DotnetStackSymbolicate.App.MethodA() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 19
at DotnetStackSymbolicate.App..ctor() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 38
at DotnetStackSymbolicate.Program.OnCreate() in C:\DotnetStackSymbolicate.Tizen\DotnetStackSymbolicate.Tizen.cs:line 12
onSigabrt called
Output: stack.trace.symbolicated
Para notificar pilas administradas mediante dotnet-stack
, haga lo siguiente:
Averigüe el identificador de proceso (PID) de la aplicación .NET Core del que se van a notificar pilas.
tasklist
, por ejemplo.ps
.Ejecute el siguiente comando:
dotnet-stack report --process-id <PID>
El comando anterior genera una salida similar a la siguiente:
Thread (0x48839B):
[Native Frames]
System.Console!System.IO.StdInReader.ReadKey(bool&)
System.Console!System.IO.SyncTextReader.ReadKey(bool&)
System.Console!System.ConsolePal.ReadKey(bool)
System.Console!System.Console.ReadKey()
StackTracee!Tracee.Program.Main(class System.String[])
La salida de dotnet-stack
tiene el formato siguiente:
#
.Thread (<thread-id>):
.Module!Method
.[Native Frames]
.# comment
Thread (0x1234):
module!Method
module!Method
Thread (0x5678):
[Native Frames]
Module!Method
Module!Method
Nota
La detención del proceso puede llevar mucho tiempo (hasta varios minutos) en el caso de las aplicaciones de tamaño muy grande. El runtime debe enviar información sobre el tipo y el método de todo el código administrado que se ha capturado para resolver los nombres de función.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Cursos
Ruta de aprendizaje
Depuración de aplicaciones de consola de C# (Introducción a C#, parte 6) - Training
Depuración de aplicaciones de consola de C# (Introducción a C#, parte 6)