Aracılığıyla paylaş


Linux'ta LLDB'yi yükleme ve kullanma

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.

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

  2. 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 lldbolur, ancak bazı dağıtımlar adında gibi lldb-3.9bir 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)
    
  3. (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.

  4. Ö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.