Udostępnij przez


Instalowanie i używanie usługi LLDB w systemie Linux

LLDB to zaawansowany debuger typu open source, który jest częścią projektu LLVM. Podczas debugowania aplikacji .NET w systemie Linux można użyć usługi LLDB z rozszerzeniami debugera platformy .NET , aby sprawdzić stan aplikacji zarządzanej. Usługa LLDB może pracować zarówno z zrzutami, jak i procesami na żywo.

Instalowanie

Instalowanie usługi LLDB

Rozszerzenia debuggera .NET wymagają co najmniej wersji LLDB 3.9, ale zalecana jest wersja 10.0 lub nowsza. Poniższe sekcje zawierają instrukcje dotyczące instalowania usługi LLDB w popularnych dystrybucjach systemu Linux.

AzureLinux 2.0 i nowsze

Aby zainstalować pakiety LLDB:

    sudo tdnf install lldb

Aby uruchomić usługę LLDB:

    lldb

Ubuntu 20.04 i nowsze

Aby zainstalować pakiety LLDB:

    sudo apt-get update
    sudo apt-get install lldb

Aby uruchomić usługę LLDB:

    lldb

Alpine 3.9 i nowsze

Aby zainstalować pakiety LLDB:

    apk update
    apk add lldb py3-lldb

Aby uruchomić usługę LLDB:

    lldb

Debian 9 lub nowszy

Aby zainstalować pakiety LLDB:

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

Aby uruchomić usługę LLDB:

    lldb-3.9

Fedora 29 i nowsze

Aby zainstalować pakiety LLDB:

    sudo dnf install lldb python2-lldb

Aby uruchomić usługę LLDB:

    lldb

RHEL 7.5 lub nowszy

Zobacz LLDB w witrynie internetowej oprogramowania RedHat.

Instalowanie rozszerzeń debugera platformy .NET

Zainstaluj rozszerzenia debugera platformy .NET przy użyciu narzędzia instalacji dotnet-debugger-extensions . Instalator tworzy .lldbinit plik w katalogu głównym, który automatycznie ładuje rozszerzenia podczas uruchamiania usługi LLDB.

Uwaga

Wersja rozszerzeń debugera nie musi być zgodna z wersją środowiska uruchomieniowego platformy .NET. Zalecamy używanie najnowszej wersji rozszerzenia.

Uwaga

Instalowanie za pomocą dotnet-sos zamiast dotnet-debugger-extensions również działa, ale instaluje tylko podzbiór poleceń rozszerzenia.

Wprowadzenie do usługi LLDB

W tym przykładzie pokazano użycie usługi LLDB do dołączenia do istniejącej aplikacji .NET (dotnet webapp.dll), która jest uruchomiona na maszynie.

  1. ps Użyj polecenia , aby znaleźć identyfikator procesu (PID) aplikacji .NET, którą chcesz debugować.

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

    W takim przypadku piD aplikacji .NET do debugowania jest 229233.

  2. Uruchom usługę LLDB i dołącz do procesu.

    Uruchom usługę LLDB przy użyciu odpowiedniego polecenia dla dystrybucji (pokazanego wcześniej w sekcji Instalowanie usługi LLDB ). Często jest to tylko lldb, ale niektóre dystrybucje wymagają numeru wersji w nazwie, na przykład 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. (lldb) W wierszu polecenia uruchom polecenie dołączania procesu.

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

    Debuger jest teraz dołączony i można użyć zarówno wbudowanych poleceń LLDB, jak i poleceń rozszerzenia debugera platformy .NET w celu sprawdzenia stanu procesu.

    Uwaga

    Jeśli usługa LLDB wyświetli komunikat "błąd: dołączanie nie powiodło się: operacja nie jest dozwolona", oznacza to, że nie masz wystarczających uprawnień do debugowania. Najbardziej niezawodnym sposobem rozwiązania tego problemu jest zamknięcie usługi LLDB i ponowne uruchomienie przy użyciu programu sudo. Jeśli podwyższony poziom usługi LLDB nie uruchomi automatycznie normalnego skryptu lldbinit, możesz to zrobić jawnie przy użyciu argumentu --source w wierszu polecenia: sudo lldb --source ~/.lldbinit.

  4. Uruchamianie przykładowego polecenia

    Polecenie clrstack wyświetla ślad stosu dla kodu platformy .NET w aktualnie wybranym wątku.

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

Następne kroki

Aby dowiedzieć się więcej o poleceniach dostępnych podczas debugowania aplikacji .NET za pomocą usługi LLDB, zobacz dokumentację rozszerzeń debugera platformy .NET i llDB.

Zobacz też

  • LLDB, aby uzyskać więcej informacji na temat debugera LLDB.
  • Rozszerzenia debugera platformy .NET jako odniesienie do dostępnych poleceń rozszerzeń.
  • dotnet-symbol w celu uzyskania więcej informacji na temat instalowania i używania narzędzia pobierania symboli.