Bagikan melalui


Menginstal dan menggunakan LLDB di Linux

LLDB adalah debugger sumber terbuka yang kuat yang merupakan bagian dari proyek LLVM. Saat Anda men-debug aplikasi .NET di Linux, Anda dapat menggunakan LLDB dengan ekstensi debugger .NET untuk memeriksa status aplikasi terkelola. LLDB dapat bekerja dengan cadangan dan proses langsung.

Instalasi

Menginstal LLDB

Ekstensi debugger .NET memerlukan setidaknya LLDB 3.9 tetapi versi 10.0 atau yang lebih baru direkomendasikan. Bagian berikut memberikan instruksi untuk menginstal LLDB pada distribusi Linux populer.

AzureLinux 2.0 dan yang lebih baru

Untuk menginstal paket LLDB:

    sudo tdnf install lldb

Untuk meluncurkan LLDB:

    lldb

Ubuntu 20.04 dan yang lebih baru

Untuk menginstal paket LLDB:

    sudo apt-get update
    sudo apt-get install lldb

Untuk meluncurkan LLDB:

    lldb

Alpine 3.9 dan yang lebih baru

Untuk menginstal paket LLDB:

    apk update
    apk add lldb py3-lldb

Untuk meluncurkan LLDB:

    lldb

Debian 9 dan yang lebih baru

Untuk menginstal paket LLDB:

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

Untuk meluncurkan LLDB:

    lldb-3.9

Fedora 29 dan yang lebih baru

Untuk menginstal paket LLDB:

    sudo dnf install lldb python2-lldb

Untuk meluncurkan LLDB:

    lldb

RHEL 7.5 dan yang lebih baru

Lihat LLDB di situs web RedHat.

Menginstal ekstensi debugger .NET

Instal ekstensi debugger .NET menggunakan alat pemasangan dotnet-debugger-extensions. Alat penginstal membuat file .lldbinit di direktori beranda Anda yang secara otomatis memuat ekstensi saat Anda memulai LLDB.

Nota

Versi ekstensi debugger tidak perlu cocok dengan versi runtime .NET. Sebaiknya gunakan versi ekstensi terbaru.

Nota

Menginstal dengan dotnet-sos alih-alih dotnet-debugger-extensions juga berfungsi, tetapi hanya menginstal subset perintah ekstensi.

Mulai menggunakan LLDB

Contoh ini menunjukkan penggunaan LLDB untuk melampirkan ke aplikasi .NET yang sudah ada sebelumnya (dotnet webapp.dll) yang berjalan di komputer.

  1. Gunakan perintah ps untuk menemukan ID proses (PID) aplikasi .NET yang ingin Anda debug.

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

    Dalam hal ini, PID aplikasi .NET yang akan di-debug adalah 229233.

  2. Jalankan LLDB dan lampirkan ke proses.

    Luncurkan LLDB menggunakan perintah yang sesuai untuk distribusi Anda (ditunjukkan sebelumnya di bagian Instal LLDB). Seringkali ini hanya lldb, tetapi beberapa distro memerlukan nomor versi dalam nama, seperti 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. Saat di prompt (lldb), jalankan perintah menghubungkan proses.

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

    Debugger sekarang terpasang dan Anda dapat menggunakan perintah LLDB bawaan dan perintah ekstensi debugger .NET untuk memeriksa status proses.

    Nota

    Jika LLDB mengeluarkan 'kesalahan: melampirkan gagal: Operasi tidak diizinkan', ini berarti Anda tidak memiliki hak istimewa yang memadai untuk debug. Cara yang paling dapat diandalkan untuk mengatasinya adalah dengan berhenti dari LLDB dan memulai ulang menggunakan sudo. Ketika LLDB yang ditingkatkan tidak akan secara otomatis menjalankan skrip .lldbinit normal, Anda dapat melakukannya secara eksplisit dengan menggunakan argumen --source pada baris perintah: sudo lldb --source ~/.lldbinit.

  4. Jalankan perintah contoh

    Perintah clrstack menampilkan pelacakan tumpukan untuk kode .NET pada utas yang saat ini dipilih.

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

Langkah berikutnya

Untuk mempelajari selengkapnya tentang perintah yang tersedia saat men-debug aplikasi .NET dengan LLDB, lihat dokumentasi untuk ekstensi .NET debugger dan LLDB.

Lihat juga

  • LLDB untuk informasi selengkapnya tentang debugger LLDB.
  • ekstensi debugger .NET untuk referensi perintah ekstensi yang tersedia.
  • simbol dotnet untuk informasi lebih lanjut mengenai menginstal dan menggunakan alat pengunduhan simbol.