Freigeben über


Installieren und Verwenden von LLDB unter Linux

LLDB ist ein leistungsstarker Open-Source-Debugger, der Teil des LLVM-Projekts ist. Wenn Sie .NET-Anwendungen unter Linux debuggen, können Sie LLDB mit den .NET-Debuggererweiterungen verwenden, um den verwalteten Anwendungsstatus zu prüfen. LLDB kann sowohl mit Dumps als auch mit Liveprozessen arbeiten.

Installieren

LLDB installieren

Die .NET-Debuggererweiterungen erfordern mindestens LLDB 3.9, aber Version 10.0 oder höher wird empfohlen. In den folgenden Abschnitten finden Sie Anweisungen zum Installieren von LLDB auf gängigen Linux-Distributionen.

AzureLinux 2.0 und höher

So installieren Sie die LLDB-Pakete:

    sudo tdnf install lldb

So starten Sie LLDB:

    lldb

Ubuntu 20.04 und höher

So installieren Sie die LLDB-Pakete:

    sudo apt-get update
    sudo apt-get install lldb

So starten Sie LLDB:

    lldb

Alpine 3.9 und höher

So installieren Sie die LLDB-Pakete:

    apk update
    apk add lldb py3-lldb

So starten Sie LLDB:

    lldb

Debian 9 und höher

So installieren Sie die LLDB-Pakete:

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

So starten Sie LLDB:

    lldb-3.9

Fedora 29 und höher

So installieren Sie die LLDB-Pakete:

    sudo dnf install lldb python2-lldb

So starten Sie LLDB:

    lldb

RHEL 7.5 und höher

Siehe LLDB auf redHats Website.

Installieren der .NET-Debuggererweiterungen

Installieren Sie die .NET-Debuggererweiterungen mithilfe des Installationstools dotnet-debugger-extensions . Das Installationsprogramm erstellt eine .lldbinit Datei in Ihrem Startverzeichnis, die die Erweiterungen automatisch lädt, wenn Sie LLDB starten.

Hinweis

Die Version der Debuggererweiterungen muss nicht mit der Version der .NET-Laufzeit übereinstimmen. Es wird empfohlen, die neueste Erweiterungsversion zu verwenden.

Hinweis

Die Installation mit dotnet-sos anstelle von dotnet-debugger-extensions funktioniert ebenfalls, installiert aber nur eine Teilmenge der Erweiterungsbefehle.

Erste Schritte mit LLDB

Dieses Beispiel zeigt die Verwendung von LLDB zum Anfügen an eine bereits vorhandene .NET-Anwendung (dotnet webapp.dll), die auf dem Computer ausgeführt wird.

  1. Verwenden Sie den ps Befehl, um die Prozess-ID (PID) der .NET-Anwendung zu finden, die Sie debuggen möchten.

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

    In diesem Fall ist die PID der zu debuggenden .NET-Anwendung 229233.

  2. Führen Sie LLDB aus, und fügen Sie es an den Prozess an.

    Starten Sie LLDB mit dem entsprechenden Befehl für Ihre Verteilung (siehe oben im Abschnitt "LLDB installieren "). Dies ist häufig einfach lldb, aber einige Distros erfordern eine Versionsnummer im Namen, wie 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. Führen Sie an der (lldb)-Eingabeaufforderung den Befehl zum Anfügen an den Prozess aus.

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

    Der Debugger ist jetzt angefügt, und Sie können sowohl integrierte LLDB-Befehle als auch .NET-Debuggererweiterungsbefehle verwenden, um den Prozessstatus zu prüfen.

    Hinweis

    Wenn LLDB "error: attach failed: Operation not permitted" ausgibt, bedeutet dies, dass Sie nicht über ausreichende Berechtigungen zum Debuggen verfügen. Die zuverlässigste Möglichkeit, dies zu beheben, besteht darin, LLDB zu beenden und mithilfe von sudo neu zu starten. Wenn LLDB mit erhöhten Rechten nicht automatisch das normale LLDbinit-Skript ausführt, können Sie dies explizit mithilfe des --source Arguments in der Befehlszeile tun: sudo lldb --source ~/.lldbinit.

  4. Ausführen eines Beispielbefehls

    Der Clrstack-Befehl zeigt die Stapelablaufverfolgung für .NET-Code im aktuell ausgewählten Thread an.

        (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ächste Schritte

Weitere Informationen zu den Befehlen, die beim Debuggen von .NET-Anwendungen mit LLDB verfügbar sind, finden Sie in der Dokumentation zu den .NET-Debuggererweiterungen und LLDB.

Siehe auch

  • LLDB für weitere Informationen zum LLDB-Debugger.
  • .NET-Debuggererweiterungen für einen Verweis auf die verfügbaren Erweiterungsbefehle.
  • dotnet-symbol für weitere Informationen zur Installation und Verwendung des Symbol-Download-Tools.