Men-debug masalah pada native code
Jika Anda kesulitan memahami tombstone atau dump masalah pada native code, Men-debug Kode Platform Android Native merupakan pengantar yang tepat.
Untuk katalog yang lebih lengkap tentang jenis error umum dan cara menyelidikinya, lihat Mendiagnosis Masalah pada Native Code.
Alat ndk-stack dapat membantu menyimbolkan error.
Anda dapat men-debug error di Android Studio sebagaimana dijelaskan dalam dokumentasi
umum Men-debug aplikasi. Jika Anda lebih memilih menggunakan
command line, ndk-gdb memungkinkan Anda melampirkan gdb
atau
lldb
dari shell.
Memberi aplikasi akses langsung ke rekaman aktivitas tombstone
Mulai di Android 12 (API level 31), Anda dapat mengakses tombstone masalah pada native code
aplikasi sebagai
buffering protokol melalui
metode
ApplicationExitInfo.getTraceInputStream()
. Buffering protokol diserialisasi menggunakan skema ini.
Sebelumnya, satu-satunya cara untuk mendapatkan akses ke informasi ini adalah melalui
Android Debug Bridge (adb).
Berikut adalah contoh cara penerapannya pada aplikasi Anda:
ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
if (aei.getReason() == REASON_CRASH_NATIVE) {
// Get the tombstone input stream.
InputStream trace = aei.getTraceInputStream();
// The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
Tombstone tombstone = Tombstone.parseFrom(trace);
}
}
Men-debug masalah memori native
Address Sanitizer (HWASan/ASan)
HWAddress Sanitizer (HWASan) dan Address Sanitizer (ASan) mirip dengan Valgrind, tetapi jauh lebih cepat dan jauh lebih baik didukung di Android.
Keduanya merupakan opsi terbaik untuk men-debug error memori di Android.
Debug Malloc
Lihat Malloc Debug dan Pelacakan Memori Native menggunakan Callback libc untuk mendapatkan penjelasan menyeluruh tentang opsi bawaan library C untuk men-debug masalah memori native.
Hook malloc
Jika Anda ingin membangun alat sendiri, libc Android juga mendukung intersepsi semua panggilan alokasi/gratis yang terjadi selama eksekusi program. Lihat Dokumentasi malloc_hooks untuk mendapatkan petunjuk penggunaan.
Statistik malloc
Android mendukung
ekstensi mallinfo(3)
dan
malloc_info(3)
ke <malloc.h>
.
Fungsi malloc_info
tersedia di Android 6.0 (Marshmallow) dan
yang lebih tinggi serta skema XML-nya didokumentasikan dalam header
malloc.h
Bionic.
Pembuatan profil
Untuk pembuatan profil CPU kode native, Anda dapat menggunakan Simpleperf.