Menggunakan Debugger

Halaman ini merinci menggunakan LLDB atau GDB untuk pengembangan OS. Untuk pengembangan aplikasi, lihat Men- debug aplikasi Anda , yang menjelaskan cara menggunakan Android Studio GUI (berdasarkan LLDB).

GDB tidak digunakan lagi dan akan segera dihapus. Jika Anda beralih dari GDB ke LLDB, Anda mungkin harus mulai dengan membaca Tutorial LLDB . Jika Anda adalah pengguna GDB ahli, peta perintah GDB ke LLDB sangat membantu saat transisi.

Prasyarat

Untuk menggunakan debugger:

  • Siapkan lingkungan build dengan perintah envsetup.sh biasa.
  • Jalankan perintah lunch yang sama yang Anda gunakan saat membangun.

Untuk bantuan lebih lanjut dalam menyiapkan lingkungan Anda, lihat Menyiapkan lingkungan .

Men-debug aplikasi atau proses yang sedang berjalan

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

gdbclient.py -p 1234

Script menyiapkan penerusan port, memulai rintisan debug jarak jauh yang sesuai pada perangkat, memulai debugger pada host, mengonfigurasinya untuk menemukan simbol, dan menghubungkannya ke rintisan debug jarak jauh.

Men-debug startup proses asli

Untuk men-debug proses saat dimulai, gunakan gdbclient.py dengan opsi -r . Misalnya, untuk men-debug ls /bin , jalankan ini di Host:

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

Kemudian, masukkan continue pada prompt 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. Melampirkan berfungsi dalam beberapa kasus, tetapi dalam kasus lain tidak mungkin karena aplikasi mogok sebelum Anda dapat melampirkan. Pendekatan logwrapper (digunakan untuk strace ) tidak selalu berfungsi karena aplikasi mungkin tidak memiliki izin untuk membuka port, dan gdbserver mewarisi batasan itu.

Untuk men-debug startup aplikasi, gunakan opsi pengembang di Pengaturan untuk menginstruksikan aplikasi menunggu debugger Java untuk dilampirkan:

  1. Buka Pengaturan > Opsi pengembang > Pilih aplikasi debug dan pilih aplikasi Anda dari daftar, lalu klik Tunggu debugger .
  2. Mulai aplikasi, baik dari peluncur atau dengan menggunakan baris perintah 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 sedang menunggu debugger.
  4. Lampirkan gdbserver / gdbclient secara normal, setel breakpoint, lalu lanjutkan prosesnya.

Untuk menjalankan aplikasi, lampirkan debugger Java Debug Wire Protocol (JDWP) 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 mogok

Jika Anda ingin debuggerd menangguhkan proses yang macet sehingga Anda dapat melampirkan debugger, setel properti yang sesuai:

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

Di akhir keluaran mogok biasa, debuggerd menyediakan instruksi salin dan tempel di logcat yang menunjukkan cara menghubungkan debugger ke proses mogok.

Debug tanpa simbol

Untuk ARM 32-bit, jika Anda tidak memiliki simbol, gdb tidak dapat menentukan set instruksi mana yang dibongkar (ARM atau Thumb). Untuk menentukan set instruksi yang dipilih sebagai default ketika informasi simbol hilang, setel properti berikut:

set arm fallback-mode arm  # or thumb

Debug dengan Kode VS

LLDB mendukung debugging kode platform pada Visual Studio Code . Anda dapat menggunakan frontend debugger VS Code alih-alih antarmuka LLDB CLI untuk mengontrol dan men-debug kode asli yang berjalan di perangkat.

Sebelum menggunakan VS Code untuk debugging, instal ekstensi CodeLLDB .

Untuk men-debug kode menggunakan Kode VS:

  1. Pastikan semua artefak build (seperti simbol) yang diperlukan untuk menjalankan gdbclient.py atau lldbclient.py ada.
  2. Jalankan perintah berikut:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    Ini mencetak objek JSON dan lldbclient.py terus berjalan. Ini diharapkan; jangan matikan program lldbclient.py .

    Bendera -r harus menjadi bendera terakhir jika ada karena cara bendera diuraikan oleh alat.

  3. Pada tab debugging di VS Code, pilih add configuration , lalu pilih LLDB: Custom Launch . Ini akan membuka file launch.json dan menambahkan objek JSON baru ke daftar.
  4. Hapus konfigurasi debugger yang baru ditambahkan.
  5. Salin objek JSON yang dicetak oleh lldbclient.py dan tempel ke objek yang baru saja Anda hapus. Simpan perubahan.
  6. Untuk memuat ulang jendela guna menyegarkan daftar debugger, tekan Ctrl+Shift+P dan ketik reload window .
  7. Pilih konfigurasi debugger baru dan tekan run . Debugger akan terhubung setelah 10 hingga 30 detik.
  8. Setelah selesai men-debug, buka terminal yang menjalankan lldbclient.py dan tekan Enter untuk mengakhiri program lldbclient.py .