แก้ไขข้อบกพร่องของการขัดข้องของระบบ
ถ้าคุณไม่ค่อยเข้าใจ ไฟล์ 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 ได้