Halaman ini merinci penggunaan LLDB untuk pengembangan OS. Untuk pengembangan aplikasi, lihat Men-debug aplikasi Anda , yang menjelaskan cara menggunakan GUI Android Studio (berdasarkan LLDB).
GDB tidak lagi didukung atau disediakan. Jika Anda beralih dari GDB ke LLDB, Anda mungkin harus mulai dengan membaca Tutorial LLDB . Jika Anda adalah pengguna ahli GDB, peta perintah GDB ke LLDB sangat membantu saat melakukan transisi.
Prasyarat
Untuk menggunakan debugger:
- Siapkan lingkungan build dengan perintah
envsetup.sh
biasa. - Jalankan perintah
lunch
yang sama yang Anda gunakan saat membangun. Perhatikan bahwa item makan siang harus sama persis dengan perangkat yang Anda debug. Jika item makan siang tidak cocok dengan perangkat yang terpasang, Anda akan mendapatkan error berupa:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Hubungkan perangkat Anda ke mesin.
Untuk bantuan lebih lanjut dalam menyiapkan lingkungan Anda, lihat Menyiapkan lingkungan .
Men-debug biner
Untuk men-debug biner yang Anda buat di mesin, pertama-tama Anda harus menyalin biner ke perangkat, lalu meluncurkan debugger. Misalnya:
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 yang sedang berjalan atau daemon asli, gunakan lldbclient.py
dengan PID. Misalnya, untuk men-debug proses dengan PID 1234, jalankan ini di host:
lldbclient.py -p 1234
Skrip mengatur penerusan port, memulai stub debugging jarak jauh yang sesuai pada perangkat, memulai debugger pada host, mengkonfigurasinya untuk menemukan simbol, dan menghubungkannya ke stub debugging jarak jauh.
Men-debug startup proses asli
Untuk men-debug proses saat dimulai, gunakan lldbclient.py
dengan opsi -r
. Misalnya, untuk men-debug ls /bin
, jalankan ini di host:
lldbclient.py -r /system/bin/ls /bin
Lalu, masukkan continue
saat diminta debugger.
Men-debug startup aplikasi
Terkadang Anda ingin men-debug aplikasi saat aplikasi dimulai, seperti saat terjadi error dan Anda ingin menelusuri kode untuk melihat apa yang terjadi sebelum error. Melampirkan berfungsi dalam beberapa kasus, namun 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 lldbserver
mewarisi batasan tersebut.
Untuk men-debug startup aplikasi, gunakan opsi pengembang di Pengaturan untuk memerintahkan aplikasi menunggu hingga debugger Java terpasang:
- Buka Pengaturan > Opsi pengembang > Pilih aplikasi debug dan pilih aplikasi Anda dari daftar, lalu klik Tunggu debugger .
- 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
- Tunggu hingga aplikasi dimuat dan muncul dialog yang memberi tahu Anda bahwa aplikasi sedang menunggu debugger.
- Pasang
lldbserver
/lldbclient
secara normal, atur breakpoint, lalu lanjutkan proses.
Agar aplikasi dapat berjalan, 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 mogok sehingga Anda dapat memasang debugger, atur 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
Di akhir keluaran kerusakan yang biasa, debuggerd
memberikan instruksi salin dan tempel di logcat yang menunjukkan cara menghubungkan debugger ke proses yang mengalami kerusakan.
Men-debug dengan VS Code
LLDB mendukung kode platform debugging 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 VS Code:
- Pastikan semua artefak build (seperti simbol) yang diperlukan untuk menjalankan
lldbclient.py
ataulldbclient.py
ada. - Di VS Code, tekan Ctrl+Shift+P untuk menjalankan perintah, cari Debug: Add Configuration... , lalu pilih LLDB . Ini akan membuka file
launch.json
dan menambahkan objek JSON baru ke daftar. - Ganti konfigurasi debugger yang baru ditambahkan dengan dua baris komentar -
// #lldbclient-generated-begin
dan// #lldbclient-generated-end
, sehingga daftar konfigurasi Anda terlihat seperti ini:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
menggunakan komentar ini untuk mendeteksi tempat menulis konfigurasi. Jika ada item lain dalam daftar, tambahkan baris komentar di akhir setelah konfigurasi lainnya. - Jalankan perintah berikut di terminal tempat Anda menjalankan
envsetup.sh
danlunch
: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 kelaunch.json
dan terus berjalan. Hal ini diharapkan; jangan matikan programlldbclient.py
. Jika Anda menghilangkan--vscode-launch-file
skrip akan mencetak cuplikan JSON yang perlu Anda salin dan tempel kelaunch.json
secara manual.Bendera
-r
harus menjadi bendera terakhir jika ada karena cara bendera diurai oleh alat tersebut. - Buka bilah sisi Jalankan dan Debug - konfigurasi baru akan muncul di daftar debugger. Tekan Mulai Debugging (F5) . Debugger akan terhubung setelah 10 hingga 30 detik.
Jika konfigurasi baru tidak muncul dalam tampilan Jalankan dan Debug, muat ulang jendela untuk menyegarkan daftar debugger - tekan Ctrl+Shift+P dan ketik
reload window
. - Setelah selesai melakukan debug, buka terminal yang menjalankan
lldbclient.py
dan tekan Enter untuk mengakhiri programlldbclient.py
. Eksekusi skrip selanjutnya akan menghasilkan konfigurasi antara komentar#lldbclient-generated
dan mengganti konten lama, Anda tidak perlu menghapusnya secara manual.
Untuk menambahkan properti khusus ke konfigurasi peluncuran yang dihasilkan, Anda dapat menggunakan flag --vscode-launch-props
. Misalnya:
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 melakukan debug dan menambahkan langkah inisialisasi debug baru ke langkah-langkah yang dihasilkan oleh skrip. Anda dapat menemukan ikhtisar properti yang tersedia di dokumentasi VS Code dan di Panduan Pengguna ekstensi CodeLLDB .