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, צריך להפעיל קודם את ממשק המשתמש המקורי של הזיכרון:
- פתיחת
~/.android/ddms.cfg
- מוסיפים את השורה:
native=true
אחרי שמפעילים מחדש את DDMS ובוחרים תהליך, אפשר לעבור לכרטיסייה החדשה של הקצאת זיכרון מקומית ולאכלס אותה ברשימה של הקצאות. האפשרות הזו שימושית במיוחד לניפוי באגים של דליפות זיכרון.