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

כלי לניקוי כתובות: HWASan/ASan

מפתחי פלטפורמת Android משתמשים ב-HWAddressSanitizer (HWASan) כדי למצוא באגים בזיכרון ב-C/C++.

אפשר להטמיע קובצי אימג' של HWASan שנוצרו מראש במכשירי Pixel נתמכים מ-ci.android.com (הוראות מפורטות להגדרה).

החל מגרסה 8.0 (Oreo) של Android, אפשר גם להשתמש ב-ASAN כדי לנפות באגים באפליקציות במכשירי ייצור שלא עברו תהליך רוט. ב-ASan wiki תוכלו למצוא הוראות.

Heapprofd

Android 10 תומך ב-heapprofd, כלי לניתוח אשכולות (heap) באמצעות דגימה עם עלות נמוכה. heapprofd מאפשר לשייך את השימוש בזיכרון מקומי למחסומי קריאות בתוכנית. מידע נוסף זמין במאמר heapprofd – Android Heap Profiler באתר התיעוד של Perfetto.

ניפוי באגים בשיטת Malloc

לתיאור מפורט של אפשרויות ניפוי הבאגים שזמינות לבעיות בזיכרון נייטיב, ראו ניפוי באגים ב-Malloc ומעקב אחר זיכרון נייטיב באמצעות קריאות חוזרות (callbacks) של libc.

בעל גישה

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

קטעי הוק (hooks) של Malloc

אם אתם רוצים ליצור כלים משלכם, libc של Android תומכת גם בחסימת כל הקריאות להקצאה/שחרור שמתרחשות במהלך ביצוע התוכנית. הוראות השימוש מפורטות במסמכי התיעוד של malloc_hooks.

נתונים סטטיסטיים של מלאית

ב-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, צריך קודם להפעיל את ממשק המשתמש המקורי של הזיכרון:

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

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