แก้ไขข้อบกพร่องโปรเจ็กต์

แก้ไขข้อบกพร่องของการขัดข้องของระบบ

ถ้าคุณไม่ค่อยเข้าใจ ไฟล์ Dump ข้อขัดข้องดั้งเดิม หรือ Tombstone การแก้ไขข้อบกพร่องของโค้ดแพลตฟอร์ม Android ที่มาพร้อมเครื่อง เป็นบทนำที่ดี

สำหรับแคตตาล็อกฉบับเต็มของประเภทข้อขัดข้องที่พบได้ทั่วไปและวิธีตรวจสอบ โปรดไปที่ การวิเคราะห์ข้อขัดข้องของระบบ

เครื่องมือ ndk-stack ช่วยเป็นสัญลักษณ์ของข้อขัดข้องได้ คุณสามารถแก้ไขข้อบกพร่องของข้อขัดข้องใน Android Studio ได้ตามที่อธิบายไว้ใน เอกสารประกอบเกี่ยวกับแก้ไขข้อบกพร่องของแอป หากคุณต้องการใช้ บรรทัดคำสั่ง ndk-gdb ช่วยให้คุณแนบ gdb หรือ lldb จาก Shell ของคุณ

อนุญาตให้แอปเข้าถึงการติดตาม Tombstone ได้โดยตรง

ตั้งแต่ Android 12 (API ระดับ 31) เป็นต้นไป คุณจะเข้าถึงข้อขัดข้องดั้งเดิมของแอปได้ Tombstone บัฟเฟอร์โปรโตคอลผ่าน ApplicationExitInfo.getTraceInputStream() บัฟเฟอร์โปรโตคอลจะได้รับการทำให้เป็นอนุกรมโดยใช้สคีมานี้ ก่อนหน้านี้ วิธีเดียวที่จะเข้าถึงข้อมูลนี้คือผ่านทาง Android Debug Bridge (adb)

ต่อไปนี้คือตัวอย่างวิธีนำวิธีนี้ไปใช้ในแอปของคุณ

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);
    }
}

แก้ไขข้อบกพร่องปัญหาเกี่ยวกับหน่วยความจำของระบบ

ตัวล้างที่อยู่ (HWASan/ASan)

HWAddress Sanitizer (HWASan) และ Address Sanitizer (ASan) นั้นคล้ายกับ Valgrind แต่ เร็วขึ้นและสนับสนุนได้ดีขึ้นมากบน Android

ตัวเลือกเหล่านี้เป็นตัวเลือกที่ดีที่สุดสำหรับการแก้ไขข้อบกพร่องด้านหน่วยความจําใน Android

การแก้ไขข้อบกพร่องของ Malloc

โปรดดู แก้ไขข้อบกพร่อง Malloc และ การติดตามหน่วยความจำของระบบโดยใช้ libc Callback สำหรับคำอธิบายโดยละเอียดเกี่ยวกับตัวเลือกในตัวของไลบรารี C สำหรับการแก้ไขข้อบกพร่อง หน่วยความจำของระบบ

ตะขอของ Malloc

หากต้องการสร้างเครื่องมือของคุณเอง libc ของ Android ก็รองรับการสกัดกั้นด้วย การจัดสรร/การโทรที่ไม่เสียค่าใช้จ่ายทั้งหมดที่เกิดขึ้นระหว่างการดำเนินการโปรแกรม โปรดดู เอกสารเกี่ยวกับ malloc_hooks เพื่อดูวิธีการใช้งาน

สถิติ Malloc

Android รองรับ mallinfo(3) และ malloc_info(3) ส่วนขยายไปยัง <malloc.h>

ฟังก์ชัน malloc_info พร้อมใช้งานใน Android 6.0 (Marshmallow) และ สูงกว่า และสคีมา XML ได้รับการบันทึกไว้ในเอกสารของ Bionic malloc.h ส่วนหัว

กำลังทำโปรไฟล์

สำหรับการทำโปรไฟล์ CPU ของโค้ดแบบเนทีฟ คุณสามารถใช้ Simpleperf ได้