Address Sanitizer: HWASan/ASan
מפתחים בפלטפורמת Android משתמשים ב-HWAddressSanitizer (HWASan) כדי למצוא באגים בזיכרון ב-C/C++.
אפשר לצרוב קבצי אימג' של HWASan שנוצרו מראש במכשירי Pixel נתמכים מכתובת ci.android.com (הוראות מפורטות להגדרה).
מגרסה Android 8.0 (Oreo) אפשר גם להשתמש ב-ASan כדי לנפות באגים באפליקציות במכשירי ייצור שלא בוצע בהם Root. הוראות זמינות בדף הוויקי של ASan.Heapprofd
Android 10 תומך ב-heapprofd, כלי ליצירת פרופיל של ערימה עם תקורה נמוכה ודגימה. הכלי heapprofd מאפשר לשייך את השימוש בזיכרון מקומי למחסניות קריאות בתוכנית. מידע נוסף זמין במאמר heapprofd – Android Heap Profiler באתר Perfetto documentation.
ניפוי באגים בשיטת Malloc
במאמרים Malloc Debug ו-Native Memory Tracking using libc Callbacks מפורטות האפשרויות לניפוי באגים שזמינות לבעיות בזיכרון המקומי.
libmemunreachable
libmemunreachable של Android הוא גלאי דליפות זיכרון נייטיב עם תקורה אפסית. הוא משתמש במעבר לא מדויק של איסוף אשפה מסוג mark-and-sweep על כל הזיכרון המקורי, ומדווח על כל הבלוקים שלא ניתן להגיע אליהם כדליפות. הוראות שימוש מפורטות זמינות בתיעוד של libmemunreachable.
קטעי הוק (hooks) של 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 Debug Monitor (DDMS) כדי לקבל תצוגה גרפית של הפלט של Malloc Debug.
כדי להשתמש ב-DDMS, צריך להפעיל קודם את ממשק המשתמש המקורי של הזיכרון:
- פתיחת
~/.android/ddms.cfg - מוסיפים את השורה:
native=true
אחרי שמפעילים מחדש את DDMS ובוחרים תהליך, אפשר לעבור לכרטיסייה החדשה של הקצאת זיכרון מקומית ולאכלס אותה ברשימה של הקצאות. האפשרות הזו שימושית במיוחד לניפוי באגים של דליפות זיכרון.