Address Sanitizer: HWASan/ASan
นักพัฒนาแพลตฟอร์ม Android ใช้ HWAddressSanitizer (HWASan) เพื่อค้นหาข้อบกพร่องด้านหน่วยความจำใน C/C++
คุณสามารถแฟลชอิมเมจ HWASan ที่สร้างไว้ล่วงหน้าไปยังอุปกรณ์ Pixel ที่รองรับได้จาก ci.android.com (วิธีการตั้งค่าโดยละเอียด)
ตั้งแต่ Android 8.0 (Oreo) เป็นต้นมา คุณยังใช้ ASan เพื่อแก้ไขข้อบกพร่องของแอปในอุปกรณ์เวอร์ชันที่ใช้งานจริงซึ่งไม่ได้รูทได้ด้วย ดูวิธีการได้ในวิกิ ASanHeapprofd
Android 10 รองรับ heapprofd ซึ่งเป็นเครื่องมือสร้างโปรไฟล์ฮีปแบบสุ่มตัวอย่างที่มีค่าใช้จ่ายต่ำ heapprofd ช่วยให้คุณระบุการใช้หน่วยความจำเนทีฟกับ Callstack ในโปรแกรมได้ ดูข้อมูลเพิ่มเติมได้ที่ heapprofd - Android Heap Profiler ในเว็บไซต์เอกสารประกอบของ Perfetto
การแก้ไขข้อบกพร่องด้วย Malloc
ดูคำอธิบายโดยละเอียดเกี่ยวกับตัวเลือกการแก้ไขข้อบกพร่องที่ใช้ได้สำหรับปัญหาเกี่ยวกับหน่วยความจำเนทีฟได้ที่ Malloc Debug และการติดตามหน่วยความจำเนทีฟโดยใช้การเรียกกลับของ libc
libmemunreachable
libmemunreachable ของ Android เป็นเครื่องมือตรวจหาหน่วยความจำของระบบที่ไม่มีการใช้งานซึ่งมีค่าใช้จ่ายเป็น 0 โดยจะใช้การส่งผ่านตัวรวบรวมขยะแบบมาร์กแอนด์สวีปที่ไม่แม่นยำกับหน่วยความจำเนทีฟทั้งหมด และรายงานบล็อกที่เข้าถึงไม่ได้ว่าเป็นการรั่วไหล ดูวิธีการใช้งานได้ใน เอกสารประกอบของ libmemunreachable
ฮุก Malloc
หากต้องการสร้างเครื่องมือของคุณเอง libc ของ Android ยังรองรับการสกัดกั้นการเรียกการจัดสรร/การเรียกฟรีทั้งหมดที่เกิดขึ้นระหว่างการดำเนินการโปรแกรมด้วย ดูวิธีการใช้งานได้ที่ เอกสารประกอบ malloc_hooks
สถิติ Malloc
Android รองรับส่วนขยาย mallinfo(3)
และ malloc_info(3)
สำหรับ <malloc.h>
malloc_info
พร้อมใช้งานใน Android 6.0 (Marshmallow) ขึ้นไป และ
สคีมา XML ของฟังก์ชันนี้มีอยู่ใน <malloc.h>
ของ Bionic
เซิร์ฟเวอร์ตรวจสอบการแก้ไขข้อบกพร่องของ Dalvik
นอกจากนี้ คุณยังใช้ Dalvik Debug Monitor Server (DDMS) เพื่อดูเอาต์พุตของ Malloc Debug ในรูปแบบกราฟิกได้ด้วย
หากต้องการใช้ DDMS ให้เปิด UI หน่วยความจำดั้งเดิมก่อน โดยทำดังนี้
- เปิด
~/.android/ddms.cfg
- เพิ่มบรรทัดต่อไปนี้
native=true
เมื่อเปิด DDMS อีกครั้งและเลือกกระบวนการแล้ว คุณจะเปลี่ยนไปใช้แท็บการจัดสรรใหม่ แบบเนทีฟและป้อนข้อมูลด้วยรายการการจัดสรรได้ ซึ่งมีประโยชน์อย่างยิ่งสำหรับการแก้ไขข้อบกพร่องของหน่วยความจำรั่วไหล