แก้ไขข้อบกพร่องการใช้หน่วยความจำในเครื่อง

Address Sanitizer: HWASan/ASan

นักพัฒนาแพลตฟอร์ม Android ใช้ HWAddressSanitizer (HWASan) เพื่อค้นหาข้อบกพร่องด้านหน่วยความจำใน C/C++

คุณสามารถแฟลชภาพ HWASan ที่คอมไพล์ไว้ล่วงหน้าลงในอุปกรณ์ Pixel ที่รองรับได้จาก ci.android.com (วิธีการตั้งค่าโดยละเอียด)

ตั้งแต่ Android 8.0 (Oreo) เป็นต้นไป คุณสามารถใช้ ASan เพื่อแก้ไขข้อบกพร่องของแอปในอุปกรณ์เวอร์ชันที่ใช้งานจริงที่ไม่ได้รูทได้ด้วย ดูวิธีการได้ในวิกิของ ASan

Heapprofd

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 ก่อน โดยทำดังนี้

  1. เปิด ~/.android/ddms.cfg
  2. เพิ่มบรรทัด: native=true

เมื่อเปิด DDMS อีกครั้งและเลือกกระบวนการแล้ว คุณสามารถเปลี่ยนไปใช้แท็บการจัดสรรใหม่และป้อนข้อมูลรายการการจัดสรร ซึ่งมีประโยชน์อย่างยิ่งสำหรับการแก้ไขข้อบกพร่องของหน่วยความจำรั่วไหล