Address Sanitizer: HWASan/ASan
นักพัฒนาแพลตฟอร์ม Android ใช้ HWAddressSanitizer (HWASan) เพื่อค้นหาข้อบกพร่องด้านหน่วยความจำใน C/C++
คุณสามารถแฟลชภาพ HWASan ที่คอมไพล์ไว้ล่วงหน้าลงในอุปกรณ์ Pixel ที่รองรับได้จาก ci.android.com (วิธีการตั้งค่าโดยละเอียด)
ตั้งแต่ Android 8.0 (Oreo) เป็นต้นไป คุณสามารถใช้ ASan เพื่อแก้ไขข้อบกพร่องของแอปในอุปกรณ์เวอร์ชันที่ใช้งานจริงที่ไม่ได้รูทได้ด้วย ดูวิธีการได้ในวิกิของ ASanHeapprofd
Android 10 รองรับ heapprofd ซึ่งเป็นเครื่องมือตรวจสอบ heap แบบสุ่มตัวอย่างที่มีค่าใช้จ่ายต่ำ heapprofd ช่วยให้คุณระบุแหล่งที่มาของการใช้หน่วยความจำแบบเนทีฟในกองซ้อนการเรียกใช้ในโปรแกรมได้ ดูข้อมูลเพิ่มเติมที่ heapprofd - Android Heap Profiler ในเว็บไซต์เอกสารประกอบของ Perfetto
การแก้ไขข้อบกพร่อง Malloc
ดูคำอธิบายโดยละเอียดของตัวเลือกการแก้ไขข้อบกพร่องสำหรับปัญหาเกี่ยวกับหน่วยความจำของระบบได้ที่การแก้ไขข้อบกพร่อง Malloc และการติดตามหน่วยความจำของระบบโดยใช้ libc Callbacks
libmemunreachable
Libmunreachable ของ Android คือเครื่องมือตรวจจับการรั่วไหลของหน่วยความจำในเครื่องแบบ Zero-over-head โดยใช้เครื่องมือเก็บขยะแบบทำเครื่องหมายและลบออกซึ่งทำงานอย่างไม่แม่นยำในหน่วยความจำเดิมทั้งหมด โดยรายงานบล็อกที่เข้าถึงไม่ได้ว่าเป็นการรั่วไหล ดูวิธีการใช้งานได้ที่หัวข้อเอกสารประกอบของ 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 (DDMS) เพื่อดูภาพกราฟิกของเอาต์พุตข้อบกพร่อง Malloc ได้ด้วย
หากต้องการใช้ DDMS ให้เปิด UI หน่วยความจำของ DDMS ก่อน โดยทำดังนี้
- เปิด
~/.android/ddms.cfg
- เพิ่มบรรทัด:
native=true
เมื่อเปิด DDMS อีกครั้งและเลือกกระบวนการแล้ว คุณสามารถเปลี่ยนไปใช้แท็บการจัดสรรใหม่และป้อนข้อมูลรายการการจัดสรร ซึ่งมีประโยชน์อย่างยิ่งสำหรับการแก้ไขข้อบกพร่องของหน่วยความจำรั่วไหล