Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menggunakan Debugger

Ini rincian halaman menggunakan LLDB atau GDB untuk pengembangan OS. Untuk pengembangan aplikasi, lihat Debug aplikasi Anda sebagai gantinya, yang menjelaskan bagaimana 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 LLDB Tutorial . Jika Anda adalah pengguna ahli GDB, yang GDB untuk LLDB perintah peta sangat membantu sementara transisi.

Prasyarat

Untuk menggunakan debugger:

  • Mengatur membangun lingkungan dengan biasa envsetup.sh perintah.
  • Jalankan sama lunch perintah yang digunakan ketika membangun.

Untuk bantuan lebih lanjut dengan pengaturan lingkungan Anda, lihat Mengatur lingkungan .

Men-debug aplikasi atau proses yang sedang berjalan

Untuk menghubungkan ke aplikasi berjalan atau daemon asli, penggunaan 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

Debug proses seperti itu dimulai, penggunaan gdbclient.py dengan -r pilihan. Misalnya, untuk debug ls /bin , menjalankan ini pada host:

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

Lalu, masukkan continue di debugger prompt.

Men-debug startup aplikasi

Kadang-kadang Anda ingin debug aplikasi karena mulai, seperti ketika ada kecelakaan dan Anda ingin langkah melalui kode untuk melihat apa yang terjadi sebelum kecelakaan itu. Melampirkan karya dalam beberapa kasus, tetapi dalam kasus lain mungkin karena aplikasi crash sebelum Anda dapat melampirkan. The logwrapper Pendekatan (digunakan untuk strace ) tidak selalu bekerja karena aplikasi mungkin tidak memiliki izin untuk membuka port, dan gdbserver mewarisi bahwa pembatasan.

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 dari daftar, kemudian klik Tunggu debugger.
  2. Memulai 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. Melampirkan gdbserver / gdbclient normal, set breakpoints, kemudian melanjutkan proses.

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 untuk menangguhkan proses jatuh sehingga Anda dapat melampirkan debugger, mengatur properti yang tepat:

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

Pada akhir output kecelakaan biasa, debuggerd menyediakan copy dan paste petunjuk di logcat menunjukkan bagaimana menghubungkan debugger untuk proses jatuh.

Debug tanpa simbol

Untuk 32-bit ARM, jika Anda tidak memiliki simbol, gdb tidak bisa menentukan set instruksi itu pembongkaran (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 Visual Studio Kode . 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 Kode VS untuk debugging, menginstal ekstensi CodeLLDB .

Untuk men-debug kode menggunakan Kode VS:

  1. Pastikan bahwa semua membangun artefak (seperti simbol) yang diperlukan untuk menjalankan gdbclient.py atau lldbclient.py yang hadir.
  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; tidak membunuh lldbclient.py Program.

    The -r flag harus bendera terakhir jika itu hadir karena bagaimana bendera diurai oleh alat.

  3. Pada tab debugging di Kode VS, pilih konfigurasi add, kemudian pilih LLDB: Custom Launch. Ini akan membuka launch.json berkas dan menambahkan objek JSON baru untuk daftar.
  4. Hapus konfigurasi debugger yang baru ditambahkan.
  5. Salin objek JSON dicetak oleh lldbclient.py dan paste ke dalam objek yang baru saja dihapus. Simpan perubahan.
  6. Untuk reload jendela untuk me-refresh daftar debugger, tekan Ctrl + Shift + P dan jenis reload window .
  7. Pilih baru konfigurasi debugger dan tekan run. Debugger akan terhubung setelah 10 hingga 30 detik.
  8. Ketika Anda selesai debugging sedang, pergi untuk menjalankan terminal lldbclient.py dan tekan Enter untuk mengakhiri lldbclient.py Program.