Compartir a través de


Instalación y uso de LLDB en Linux

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.

  1. 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.

  2. 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, como lldb-3.9.

        $ lldb
        Current symbol store settings:
        -> Cache: /home/username/.dotnet/symbolcache
        -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0
        (lldb)
    
  3. 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.

  4. 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.