Sdílet prostřednictvím


Instalace a použití LLDB v Linuxu

LLDB je výkonný opensourcový ladicí program, který je součástí projektu LLVM. Při ladění aplikací .NET v Linuxu můžete k kontrole stavu spravované aplikace použít LLDB s rozšířeními ladicího programu .NET . LLDB může pracovat s výpisy paměti i živými procesy.

Instalujte

Instalace LLDB

Rozšíření ladicího programu .NET vyžadují alespoň LLDB 3.9, ale doporučuje se verze 10.0 nebo novější. Následující části obsahují pokyny k instalaci LLDB v oblíbených distribucích Linuxu.

AzureLinux 2.0 a novější

Instalace balíčků LLDB:

    sudo tdnf install lldb

Spuštění LLDB:

    lldb

Ubuntu 20.04 a novější

Instalace balíčků LLDB:

    sudo apt-get update
    sudo apt-get install lldb

Spuštění LLDB:

    lldb

Alpine 3.9 a novější

Instalace balíčků LLDB:

    apk update
    apk add lldb py3-lldb

Spuštění LLDB:

    lldb

Debian 9 a novější

Instalace balíčků LLDB:

    sudo apt-get install lldb-3.9 python-lldb-3.9

Spuštění LLDB:

    lldb-3.9

Fedora 29 a novější

Instalace balíčků LLDB:

    sudo dnf install lldb python2-lldb

Spuštění LLDB:

    lldb

RHEL 7.5 a novější

Podívejte se na LLDB na webu RedHatu.

Instalace rozšíření ladicího programu .NET

Nainstalujte rozšíření ladicího programu .NET pomocí instalačního nástroje dotnet-debugger-extensions . Instalační program vytvoří .lldbinit soubor ve vašem domovském adresáři, který při spuštění LLDB automaticky načte přípony.

Poznámka:

Verze rozšíření ladicího programu nemusí odpovídat verzi .NET runtime. Doporučujeme použít nejnovější verzi rozšíření.

Poznámka:

Instalace s dotnet-sos místo dotnet-debugger-extensions funguje také, ale nainstaluje pouze podmnožinu příkazů rozšíření.

Začínáme s LLDB

Tento příklad ukazuje použití LLDB k připojení k již existující aplikaci .NET spuštěnédotnet webapp.dll na počítači.

  1. ps Pomocí příkazu vyhledejte ID procesu (PID) aplikace .NET, kterou chcete ladit.

        $ ps -ao pid,cmd
        PID CMD
        697 -bash
        229233 dotnet webapp.dll
        229696 ps -ao pid,cmd
        ... other processes omitted for brevity ...
    

    V tomto případě se kód PID aplikace .NET, která se má ladit, 229233.

  2. Spusťte LLDB a připojte se k procesu.

    Spusťte LLDB pomocí příslušného příkazu pro vaši distribuci (viz předchozí část Instalace LLDB ). Často je to jen lldb, ale některé distribuce vyžadují číslo verze v názvu, například 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. Na příkazovém (lldb) řádku spusťte příkaz připojit proces.

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

    Ladicí program je teď připojený a ke kontrole stavu procesu můžete použít integrované příkazy LLDB i příkazy rozšíření ladicího programu .NET.

    Poznámka:

    Pokud LLDB vypíše chybu: připojení selhalo: Operace není povolená, znamená to, že nemáte dostatečná oprávnění k ladění. Nejspolehlivější způsob, jak to vyřešit, je ukončit LLDB a restartovat pomocí sudo. Pokud se zvýšenými oprávněními LLDB automaticky nespustí normální skript .lldbinit, můžete to provést explicitně pomocí --source argumentu na příkazovém řádku: sudo lldb --source ~/.lldbinit.

  4. Spuštění ukázkového příkazu

    Příkaz clrstack zobrazí trasování zásobníku pro kód .NET v aktuálně vybraném vlákně.

        (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]
    

Další kroky

Další informace o příkazech dostupných při ladění aplikací .NET pomocí LLDB najdete v dokumentaci k rozšířením ladicího programu .NET a LLDB.

Viz také