Halaman ini menjelaskan penggunaan LLDB untuk pengembangan OS. Untuk pengembangan aplikasi, lihat Men-debug aplikasi yang menjelaskan cara menggunakan GUI Android Studio (berdasarkan LLDB).
GDB tidak lagi didukung atau disediakan. Jika beralih dari GDB ke LLDB, sebaiknya mulai dengan membaca Tutorial LLDB. Jika Anda adalah pengguna GDB yang ahli, 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 mem-build. 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 dalam bentuk: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 build di komputer, pertama-tama Anda harus menyalin biner ke perangkat, lalu 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 sedang berjalan
Untuk terhubung ke aplikasi yang sedang berjalan atau daemon native, gunakan
lldbclient.py
dengan PID. Misalnya, untuk men-debug proses dengan PID
1234, jalankan ini di host:
lldbclient.py -p 1234
Skrip menyiapkan penerusan port, memulai stub proses debug jarak jauh yang sesuai di perangkat, memulai debugger di host, mengonfigurasinya untuk menemukan simbol, dan menghubungkannya ke stub proses debug jarak jauh.
Men-debug startup proses native
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
Kemudian, masukkan continue
di perintah 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 dapat dilakukan karena aplikasi mengalami error 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 developer di Setelan untuk memerintahkan aplikasi menunggu debugger Java dilampirkan:
- Buka Settings > Developer options > Select debug app, lalu pilih aplikasi Anda dari daftar, lalu klik Wait for debugger.
- Mulai aplikasi, baik dari peluncur atau dengan menggunakan command line untuk dijalankan:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Tunggu aplikasi dimuat dan dialog muncul yang memberi tahu Anda bahwa aplikasi sedang menunggu debugger.
- Lampirkan
lldbserver
/lldbclient
secara normal, tetapkan titik henti sementara, lalu lanjutkan prosesnya.
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 mengalami error
Jika Anda ingin debuggerd
menangguhkan proses yang error sehingga Anda dapat
melampirkan debugger, tetapkan 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 biasa, debuggerd
memberikan petunjuk salin dan tempel
di logcat yang menunjukkan cara menghubungkan debugger ke proses yang error.
Men-debug dengan VS Code
LLDB mendukung proses debug kode platform di Visual Studio Code. Anda dapat menggunakan frontend debugger VS Code, bukan antarmuka LLDB CLI, 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:
- 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, telusuri Debug:
Add Configuration..., lalu pilih LLDB.
Tindakan 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 ke bagian 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 sudah diperkirakan; jangan hentikan programlldbclient.py
. Jika Anda menghilangkan--vscode-launch-file
, skrip akan mencetak cuplikan JSON yang perlu Anda salin dan tempel kelaunch.json
secara manual.Tanda
-r
harus berupa tanda terakhir jika ada karena cara tanda diuraikan oleh alat. - Buka sidebar Run and Debug - konfigurasi baru akan muncul di
daftar debugger. Tekan Start Debugging (F5). Debugger akan terhubung setelah
10 hingga 30 detik.
Jika konfigurasi baru tidak muncul di tampilan Run dan Debug, muat ulang jendela untuk memuat ulang daftar debugger - tekan Ctrl+Shift+P dan ketik
reload window
. - Setelah selesai men-debug, buka terminal yang menjalankan
lldbclient.py
dan tekan Enter untuk mengakhiri programlldbclient.py
. Eksekusi skrip berikutnya akan menghasilkan konfigurasi di antara komentar#lldbclient-generated
dan mengganti konten lama, Anda tidak perlu menghapusnya secara manual.
Untuk menambahkan properti kustom ke konfigurasi peluncuran yang dihasilkan, Anda dapat menggunakan
flag --vscode-launch-props
. Contoh:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
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 di Panduan Pengguna
ekstensi CodeLLDB.