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