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