Men-debug project

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 membuat 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.