Menggunakan debugger

Detail halaman ini menggunakan LLDB untuk pengembangan OS. Untuk pengembangan aplikasi, lihat Mendebug aplikasi Anda sebagai gantinya, yang menjelaskan cara menggunakan GUI Android Studio (berdasarkan LLDB).

GDB tidak lagi didukung atau disediakan. Jika Anda beralih dari GDB ke LLDB, Anda harus mungkin memulainya dengan membaca Tutorial LLDB. Jika Anda seorang pengguna GDB pakar, Peta perintah GDB ke LLDB sangat membantu selama transisi.

Prasyarat

Untuk menggunakan debugger:

  • Siapkan lingkungan build dengan perintah envsetup.sh biasa.
  • Jalankan perintah lunch yang sama dengan yang Anda gunakan saat membangun. Perhatikan bahwa item makan siang harus sama persis dengan perangkat yang sedang Anda debug. Jika item makan siang tidak sesuai dengan perangkat yang terpasang, Anda akan mendapatkan error dalam formulir: You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
  • Hubungkan perangkat Anda ke mesin.

Untuk mendapatkan bantuan lebih lanjut terkait penyiapan lingkungan, lihat Menyiapkan lingkungan.

Men-debug biner

Untuk men-debug biner yang Anda bangun di mesin, Anda harus menyalin biner ke perangkat terlebih dahulu kemudian meluncurkan debugger. Contoh:

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

Men-debug aplikasi atau proses yang berjalan

Untuk terhubung ke aplikasi atau daemon native yang sedang berjalan, gunakan lldbclient.py dengan PID. Misalnya, untuk men-debug proses dengan PID 1234, jalankan ini pada host:

lldbclient.py -p 1234

Skrip ini menyiapkan penerusan porta, memulai proses potongan proses debug jarak jauh pada perangkat, memulai debugger {i>host<i}, mengkonfigurasinya untuk menemukan simbol, dan menghubungkan ke stub proses debug jarak jauh.

Men-debug startup proses native

Untuk men-debug proses saat dimulai, gunakan lldbclient.py dengan -r sebelumnya. Misalnya, untuk men-debug ls /bin, jalankan ini di host:

lldbclient.py -r /system/bin/ls /bin

Kemudian, masukkan continue saat diminta debugger.

Men-debug startup aplikasi

Terkadang Anda ingin men-debug aplikasi saat dimulai, seperti saat terjadi error dan Anda ingin menelusuri kode untuk melihat apa yang terjadi sebelum error. Memasang berfungsi dalam beberapa kasus, tetapi dalam kasus lain tidak mungkin dilakukan karena aplikasi error sebelum Anda bisa melampirkannya. Tujuan Pendekatan logwrapper (digunakan untuk strace) tidak selalu berfungsi karena aplikasi itu mungkin tidak memiliki izin untuk membuka port, dan lldbserver akan mewarisi resource.

Untuk men-debug startup aplikasi, gunakan opsi developer di Setelan untuk menginstruksikan aplikasi untuk menunggu debugger Java terpasang:

  1. Buka Setelan > Opsi developer > Pilih aplikasi debug, lalu pilih aplikasi Anda dari daftar, lalu klik Tunggu debugger.
  2. Mulai aplikasi, baik dari peluncur atau dengan menggunakan command line untuk menjalankan:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. Tunggu aplikasi dimuat dan dialog muncul yang memberi tahu Anda bahwa aplikasi untuk menunggu debugger.
  4. Lampirkan lldbserver/lldbclient seperti biasa, setel {i>breakpoint<i}, lalu melanjutkan prosesnya.

Agar aplikasi dapat berjalan, lampirkan Java Debug Wire Protocol (JDWP) debugger, seperti Java Debugger (jdb):

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

Men-debug aplikasi atau proses yang mengalami error

Jika Anda ingin debuggerd menangguhkan proses yang mengalami error sehingga Anda dapat memasang debugger, setel properti yang sesuai:

  • Setelah Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 dan yang lebih lama
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 Marshmallow dan yang lebih lama
    adb shell setprop debug.db.uid 999999
    

Di akhir output error yang biasa, debuggerd akan menyediakan salin dan tempel petunjuk di logcat yang menunjukkan cara menghubungkan debugger ke proses error.

Debug dengan VS Code

LLDB mendukung kode platform proses debug di Visual Studio Code Anda dapat menggunakan frontend debugger VS Code, bukan antarmuka CLI LLDB untuk mengontrol dan men-debug kode native yang berjalan di perangkat.

Sebelum menggunakan VS Code untuk proses debug, instal Ekstensi CodeLLDB.

Untuk men-debug kode menggunakan VS Code:

  1. Memastikan semua artefak build (seperti simbol) yang diperlukan untuk dijalankan Ada lldbclient.py atau lldbclient.py.
  2. Di VS Code, tekan Ctrl+Shift+P untuk menjalankan perintah, lalu telusuri Debug: Add Configuration..., lalu pilih LLDB. Tindakan ini akan membuka file launch.json dan menambahkan objek JSON baru ke daftar.
  3. Ganti konfigurasi debugger yang baru ditambahkan dengan dua baris komentar - // #lldbclient-generated-begin dan // #lldbclient-generated-end, jadi daftar konfigurasi Anda akan terlihat seperti ini:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py menggunakan komentar ini untuk mendeteksi tempat menulis konfigurasi. Jika ada adalah item lain dalam daftar, tambahkan baris komentar di akhir setelah konfigurasi lainnya.

  4. Jalankan perintah berikut di terminal tempat Anda menjalankan envsetup.sh dan lunch:
    lldbclient.py --setup-forwarding vscode-lldb \
          --vscode-launch-file LAUNCH_JSON_PATH \
          ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    lldbclient.py menulis konfigurasi yang dihasilkan ke dalam launch.json dan terus berjalan. Hal ini wajar terjadi; jangan menghentikan program lldbclient.py. Jika Anda hilangkan --vscode-launch-file skrip akan mencetak cuplikan JSON yang akan Anda harus menyalin dan menempel ke launch.json secara manual.

    Flag -r harus menjadi flag terakhir jika ada karena cara flag diuraikan oleh alat.

  5. Buka sidebar Run and Debug - konfigurasi baru akan muncul di daftar debugger. Tekan Start Debugging (F5). Debugger harus terhubung setelah 10 sampai 30 detik.

    Jika konfigurasi yang baru tidak muncul di tampilan Run dan Debug, muat ulang jendela untuk memuat ulang daftar debugger - tekan Ctrl+Shift+P dan ketik reload window.

  6. Setelah selesai proses debug, buka terminal yang menjalankan lldbclient.py dan tekan Enter untuk mengakhiri Program lldbclient.py. Proses berikutnya dari skrip akan menghasilkan konfigurasi di antara komentar #lldbclient-generated dan mengganti konten lama, Anda tidak menghapusnya secara manual.

Untuk menambahkan properti khusus ke konfigurasi peluncuran yang dihasilkan, Anda dapat menggunakan --vscode-launch-props. Contoh:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
Properti contoh akan membuat VS Code menjalankan tugas bernama Build sebelum proses debug dan menambahkan langkah inisialisasi debug baru ke langkah yang dihasilkan oleh skrip. Anda dapat menemukan ringkasan properti yang tersedia di dokumentasi VS Code dan dalam Panduan Pengguna Ekstensi CodeLLDB.