แก้ไขข้อบกพร่องการใช้หน่วยความจําเนทีฟ

Address Sanitizer: HWASan/ASan

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

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

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

Heapprofd

Android 10 รองรับ heapprofd ซึ่งเป็นโปรไฟล์เลอร์ฮีปแบบสุ่มตัวอย่างที่มีค่าใช้จ่ายต่ำ heapprofd ช่วยให้คุณระบุการใช้งานหน่วยความจำเนทีฟกับสแต็กการเรียกในโปรแกรมได้ ดูข้อมูลเพิ่มเติมได้ที่ heapprofd - Android Heap Profiler ใน เว็บไซต์เอกสารประกอบของ Perfetto

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

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

libmemunreachable

libmemunreachable ของ Android เป็นเครื่องมือตรวจหาหน่วยความจำเนทีฟรั่วไหลที่มีค่าใช้จ่ายเป็นศูนย์ โดยจะใช้การผ่านการเก็บขยะแบบมาร์กและกวาดอย่างไม่แม่นยำกับหน่วยความจำเนทีฟทั้งหมด และรายงานบล็อกที่เข้าถึงไม่ได้ว่าเป็นการรั่วไหล ดูวิธีการใช้งานได้ในเอกสารประกอบของ 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 หน่วยความจำเนทีฟก่อนโดยทำดังนี้

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

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