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.
LLDB es un depurador de código abierto eficaz que forma parte del proyecto LLVM. Al depurar aplicaciones .NET en Linux, puede usar LLDB con las extensiones del depurador de .NET para inspeccionar el estado de la aplicación administrada. LLDB puede trabajar con volcados de memoria y procesos activos.
Instalar
Instalación de LLDB
Las extensiones del depurador de .NET requieren al menos LLDB 3.9, pero se recomienda la versión 10.0 o posterior. En las secciones siguientes se proporcionan instrucciones para instalar LLDB en distribuciones populares de Linux.
AzureLinux 2.0 y versiones posteriores
Para instalar los paquetes LLDB:
sudo tdnf install lldb
Para iniciar LLDB:
lldb
Ubuntu 20.04 y versiones posteriores
Para instalar los paquetes LLDB:
sudo apt-get update
sudo apt-get install lldb
Para iniciar LLDB:
lldb
Alpine 3.9 y versiones posteriores
Para instalar los paquetes LLDB:
apk update
apk add lldb py3-lldb
Para iniciar LLDB:
lldb
Debian 9 y versiones posteriores
Para instalar los paquetes LLDB:
sudo apt-get install lldb-3.9 python-lldb-3.9
Para iniciar LLDB:
lldb-3.9
Fedora 29 y versiones posteriores
Para instalar los paquetes LLDB:
sudo dnf install lldb python2-lldb
Para iniciar LLDB:
lldb
RHEL 7.5 y versiones posteriores
Consulte LLDB en el sitio web de RedHat.
Instalación de las extensiones del depurador de .NET
Instale las extensiones del depurador de .NET mediante la herramienta de instalación dotnet-debugger-extensions . El instalador crea un .lldbinit
archivo en el directorio principal que carga automáticamente las extensiones al iniciar LLDB.
Nota:
La versión de las extensiones del depurador no necesita coincidir con la versión del entorno de ejecución de .NET. Se recomienda usar la versión más reciente de la extensión.
Nota:
La instalación con dotnet-sos en lugar de dotnet-debugger-extensions también funciona, pero solo instala un subconjunto de los comandos de extensión.
Introducción a LLDB
En este ejemplo se muestra el uso de LLDB para asociar a una aplicación .NET existente (dotnet webapp.dll
) existente que se ejecuta en el equipo.
Use el
ps
comando para buscar el identificador de proceso (PID) de la aplicación .NET que desea depurar.$ ps -ao pid,cmd PID CMD 697 -bash 229233 dotnet webapp.dll 229696 ps -ao pid,cmd ... other processes omitted for brevity ...
En este caso, el PID de la aplicación .NET que se va a depurar es 229233.
Ejecute LLDB y adjunte al proceso.
Inicie LLDB con el comando adecuado para la distribución (que se muestra anteriormente en la sección Instalar LLDB ). A menudo, esto es solo
lldb
, pero algunas distribuciones requieren un número de versión en el nombre, comolldb-3.9
.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)
En el símbolo del sistema de
(lldb)
, ejecute el comando de asociación de procesos.(lldb) process attach --pid 229233 Process 229233 stopped * thread #1, name = 'dotnet', stop reason = signal SIGSTOP frame #0: 0x00007f2ca7c11117 libc.so.6`___lldb_unnamed_symbol3457 + 231 libc.so.6`___lldb_unnamed_symbol3457: -> 0x7f2ca7c11117 <+231>: movl %r12d, %edi 0x7f2ca7c1111a <+234>: movq %rax, %rbx 0x7f2ca7c1111d <+237>: callq 0x7f2ca7c10a60 ; ___lldb_unnamed_symbol3445 0x7f2ca7c11122 <+242>: jmp 0x7f2ca7c11089 ; <+89> thread #2, name = 'dotnet-ust', stop reason = signal SIGSTOP frame #0: 0x00007f2ca7c9e88d libc.so.6`syscall + 29 libc.so.6`syscall: ... more output omitted ...
El depurador ahora está asociado y puede usar los comandos de LLDB integrados y los comandos de extensión del depurador de .NET para inspeccionar el estado del proceso.
Nota:
Si LLDB genera "error: error al adjuntar: operación no permitida", significa que no tiene privilegios suficientes para depurar. La manera más confiable de resolver esto es salir de LLDB y reiniciar con sudo. Cuando LLDB se ejecuta con privilegios elevados, no correrá automáticamente el script .lldbinit normal. Puede hacerlo explícitamente utilizando el argumento
--source
en la línea de comandos:sudo lldb --source ~/.lldbinit
.Ejecución de un comando de ejemplo
El comando clrstack muestra el rastro de pila para el código .NET en el subproceso seleccionado actualmente.
(lldb) clrstack OS Thread Id: 0x497 (1) Child SP IP Call Site 00007FFD0877D260 00007f2ca7c11117 [HelperMethodFrame_1OBJ: 00007ffd0877d260] System.Threading.Monitor.ObjWait(Int32, System.Object) 00007FFD0877D390 00007F2C2864AA0E System.Threading.Monitor.Wait(System.Object, Int32) 00007FFD0877D3A0 00007F2C28654625 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken) 00007FFD0877D420 00007F2C286684A8 System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken) 00007FFD0877D480 00007F2C2866832D System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) 00007FFD0877D4D0 00007F2C286B2508 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task, System.Threading.Tasks.ConfigureAwaitOptions) 00007FFD0877D4F0 00007F2C29281B45 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(Microsoft.Extensions.Hosting.IHost) 00007FFD0877D510 00007F2C29121A7D Program.<Main>$(System.String[]) [/home/username/app/Program.cs @ 25]
Pasos siguientes
Para obtener más información sobre los comandos disponibles al depurar aplicaciones .NET con LLDB, consulte la documentación de las extensiones del depurador de .NET y LLDB.
Consulte también
- LLDB para obtener más información sobre el depurador de LLDB.
- Extensiones del depurador de .NET para obtener una referencia de los comandos de extensión disponibles.
- dotnet-symbol para obtener más información sobre cómo instalar y usar la herramienta de descarga de símbolos.