Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
LLDB , LLVM projesinin bir parçası olan güçlü ve açık kaynak bir hata ayıklayıcısıdır. Linux üzerinde .NET uygulamalarında hata ayıklarken, yönetilen uygulama durumunu incelemek için .NET hata ayıklayıcısı uzantılarıyla LLDB'yi kullanabilirsiniz. LLDB hem dökümlerle hem de canlı işlemlerle çalışabilir.
Yükleme
LLDB'yi yükleme
.NET hata ayıklayıcısı uzantıları en az LLDB 3.9 gerektirir, ancak sürüm 10.0 veya üzeri önerilir. Aşağıdaki bölümlerde popüler Linux dağıtımlarına LLDB yükleme yönergeleri sağlanır.
AzureLinux 2.0 ve üzeri
LLDB paketlerini yüklemek için:
sudo tdnf install lldb
LLDB'yi başlatmak için:
lldb
Ubuntu 20.04 ve üzeri
LLDB paketlerini yüklemek için:
sudo apt-get update
sudo apt-get install lldb
LLDB'yi başlatmak için:
lldb
Alpine 3.9 ve üzeri
LLDB paketlerini yüklemek için:
apk update
apk add lldb py3-lldb
LLDB'yi başlatmak için:
lldb
Debian 9 ve üzeri
LLDB paketlerini yüklemek için:
sudo apt-get install lldb-3.9 python-lldb-3.9
LLDB'yi başlatmak için:
lldb-3.9
Fedora 29 ve üzeri
LLDB paketlerini yüklemek için:
sudo dnf install lldb python2-lldb
LLDB'yi başlatmak için:
lldb
RHEL 7.5 ve üzeri
Bkz. RedHat'in web sitesinde LLDB .
.NET hata ayıklayıcısı uzantılarını yükleme
dotnet-debugger-extensions yükleme aracını kullanarak .NET hata ayıklayıcısı uzantılarını yükleyin. Yükleyici, giriş dizininizde LLDB'yi başlattığınızda uzantıları otomatik olarak yükleyen bir .lldbinit
dosya oluşturur.
Uyarı
Hata ayıklayıcı uzantılarının sürümünün .NET çalışma zamanının sürümüyle eşleşmesi gerekmez. En son uzantı sürümünü kullanmanızı öneririz.
Uyarı
dotnet-debugger-extensions yerine dotnet-sos ile yükleme de çalışır, ancak uzantı komutlarının yalnızca bir alt kümesini yükler.
LLDB ile çalışmaya başlama
Bu örnekte, makinede çalışan önceden var olan bir .NET uygulamasına (dotnet webapp.dll
) eklemek için LLDB'nin kullanılması gösterilmektedir.
ps
Hata ayıklamak istediğiniz .NET uygulamasının işlem kimliğini (PID) bulmak için komutunu kullanın.$ ps -ao pid,cmd PID CMD 697 -bash 229233 dotnet webapp.dll 229696 ps -ao pid,cmd ... other processes omitted for brevity ...
Bu durumda hata ayıklamak için .NET uygulamasının PID'i 229233.
LLDB'yi çalıştırın ve işleme ekleyin.
Dağıtımınız için uygun komutu kullanarak LLDB'yi başlatın (daha önce LLDB'yi Yükleme bölümünde gösterilmiştir). Genellikle bu yalnızca
lldb
olur, ancak bazı dağıtımlar adında gibilldb-3.9
bir sürüm numarası gerektirir.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)
(lldb)
İstemde, işlem bağlama komutunu çalıştırın.(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 ...
Hata ayıklayıcısı artık eklenmiştir ve işlem durumunu incelemek için hem yerleşik LLDB komutlarını hem de .NET hata ayıklayıcısı uzantısı komutlarını kullanabilirsiniz.
Uyarı
LLDB 'hata: ekleme başarısız oldu: İşleme izin verilmiyor' çıkışını verirse, hata ayıklamak için yeterli ayrıcalığınız olmadığı anlamına gelir. Bunu çözmenin en güvenilir yolu LLDB'den çıkmak ve sudo kullanarak yeniden başlatmaktır. Yükseltilmiş LLDB normal .lldbinit betiğini otomatik olarak çalıştırmadığında, komut satırındaki bağımsız değişkenini
--source
kullanarak bunu açıkça yapabilirsiniz:sudo lldb --source ~/.lldbinit
.Örnek bir komut çalıştırma
clrstack komutu, seçili durumdaki iş parçacığında .NET kodu için yığın izlemesini görüntüler.
(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]
Sonraki adımlar
LLDB ile .NET uygulamalarında hata ayıklarken kullanılabilen komutlar hakkında daha fazla bilgi edinmek için .NET hata ayıklayıcısı uzantıları ve LLDB belgelerine bakın.
Ayrıca bkz.
- LLDB hata ayıklayıcısı hakkında daha fazla bilgi için LLDB.
- Kullanılabilir uzantı komutlarına ilişkin başvuru için .NET hata ayıklayıcı uzantıları.
- sembol indirme aracını yükleme ve kullanma hakkında daha fazla bilgi için dotnet-symbol.