Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
psUż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.
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ładlldb-3.9.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)(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
--sourcew wierszu polecenia:sudo lldb --source ~/.lldbinit.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.