ניפוי באגים של שימוש בזיכרון מקומי

‫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 Debug Monitor

אפשר גם להשתמש בשרת Dalvik Debug Monitor (DDMS) כדי לקבל תצוגה גרפית של הפלט של Malloc Debug.

כדי להשתמש ב-DDMS, צריך להפעיל קודם את ממשק המשתמש המקורי של הזיכרון:

  1. פתיחת ~/.android/ddms.cfg
  2. מוסיפים את השורה: native=true

אחרי שמפעילים מחדש את DDMS ובוחרים תהליך, אפשר לעבור לכרטיסייה החדשה של הקצאת זיכרון מקומית ולאכלס אותה ברשימה של הקצאות. האפשרות הזו שימושית במיוחד לניפוי באגים של דליפות זיכרון.