Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
psPomocí 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.
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říkladlldb-3.9.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)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í
--sourceargumentu na příkazovém řádku:sudo lldb --source ~/.lldbinit.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é
- LLDB pro více informací o ladicím programu LLDB.
- Rozšíření ladicího programu .NET pro odkazy na dostupné příkazy rozšíření
- dotnet-symbol pro další podrobnosti o instalaci a použití nástroje pro stažení symbolu.