Dela via


Installera och använda LLDB i Linux

LLDB är ett kraftfullt felsökningsprogram med öppen källkod som ingår i LLVM-projektet. När du felsöker .NET-program i Linux kan du använda LLDB med .NET-felsökningstilläggen för att inspektera tillståndet för hanterade program. LLDB kan fungera med både dumpar och aktiva processer.

Installera

Installera LLDB

.NET-felsökningstilläggen kräver minst LLDB 3.9, men version 10.0 eller senare rekommenderas. Följande avsnitt innehåller instruktioner för att installera LLDB på populära Linux-distributioner.

AzureLinux 2.0 och senare

Så här installerar du LLDB-paketen:

    sudo tdnf install lldb

Så här startar du LLDB:

    lldb

Ubuntu 20.04 och senare

Så här installerar du LLDB-paketen:

    sudo apt-get update
    sudo apt-get install lldb

Så här startar du LLDB:

    lldb

Alpine 3.9 och senare

Så här installerar du LLDB-paketen:

    apk update
    apk add lldb py3-lldb

Så här startar du LLDB:

    lldb

Debian 9 och senare

Så här installerar du LLDB-paketen:

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

Så här startar du LLDB:

    lldb-3.9

Fedora 29 och senare

Så här installerar du LLDB-paketen:

    sudo dnf install lldb python2-lldb

Så här startar du LLDB:

    lldb

RHEL 7.5 och senare

Se LLDB på RedHats hemsida.

Installera .NET-felsökningstilläggen

Installera .NET-felsökningstilläggen med hjälp av installationsverktyget dotnet-debugger-extensions . Installationsprogrammet skapar en .lldbinit fil i hemkatalogen som automatiskt läser in tilläggen när du startar LLDB.

Anmärkning

Versionen av felsökningstilläggen behöver inte matcha versionen av .NET-körningen. Vi rekommenderar att du använder den senaste tilläggsversionen.

Anmärkning

Installation med dotnet-sos i stället för dotnet-debugger-extensions fungerar också, men installerar bara en delmängd av tilläggskommandona.

Komma igång med LLDB

Det här exemplet visar hur du använder LLDB för att ansluta till ett befintligt .NET-program (dotnet webapp.dll) som körs på datorn.

  1. ps Använd kommandot för att hitta process-ID (PID) för det .NET-program som du vill felsöka.

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

    I det här fallet är PID för .NET-programmet som ska felsökas 229233.

  2. Kör LLDB och koppla till processen.

    Starta LLDB med lämpligt kommando för distributionen (visas tidigare i avsnittet Installera LLDB ). Ofta är detta bara lldb, men vissa distributioner kräver ett versionsnummer i namnet, till exempel 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. Vid (lldb)-prompten, kör kommandot för anslutning till process.

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

    Felsökningsprogrammet är nu anslutet och du kan använda både inbyggda LLDB-kommandon och .NET-felsökningstilläggskommandon för att inspektera processtillståndet.

    Anmärkning

    Om LLDB matar ut "error: attach failed: Operation not permitted" innebär det att du inte har tillräcklig behörighet för att felsöka. Det mest tillförlitliga sättet att lösa detta är att avsluta LLDB och starta om med sudo. När LLDB körs med förhöjda rättigheter och inte automatiskt kör det normala .lldbinit-skriptet, kan du istället utföra detta manuellt med hjälp av argumentet --source på kommandoraden: sudo lldb --source ~/.lldbinit.

  4. Kör ett exempelkommando

    Kommandot clrstack visar stackspårningen för .NET-kod i den tråd som för närvarande är vald.

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

Nästa steg

Mer information om de kommandon som är tillgängliga när du felsöker .NET-program med LLDB finns i dokumentationen för .NET-felsökningstilläggen och LLDB.

Se även

  • LLDB för mer information om LLDB-felsökningsprogrammet.
  • .NET-felsökningstillägg för en referens till de tillgängliga tilläggskommandona.
  • dotnet-symbol för mer information om hur du installerar och använder verktyget för symbolnedladdning.