ניפוי באגים בפרויקט

ניפוי באגים בקריסות נייטיב

אם קשה לכם להבין את אתר התאונה או מצבה, ניפוי באגים בקוד פלטפורמה מקורי של Android הוא מבוא טוב.

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

הכלי ndk-stack יכול לעזור בסמלים לקריסות. אפשר לנפות באגים בקריסות ב-Android Studio כפי שמתואר באופן כללי מסמכי תיעוד בנושא ניפוי באגים באפליקציה. אם ברצונך להשתמש בשורת הפקודה, ndk-gdb מאפשר לכם לצרף gdb או lldb מהמעטפת.

מתן גישה ישירה לאפליקציות עם עקבות של מצבות

החל מ-Android 12 (רמת API 31), אפשר לגשת לקריסה המקורית של האפליקציה במצבה מאגר אחסון לפרוטוקולים דרך ApplicationExitInfo.getTraceInputStream() . מאגר הנתונים הזמני של הפרוטוקול עובר סריאליזציה באמצעות הסכימה הזו. בעבר, הדרך היחידה לקבל גישה למידע הזה הייתה באמצעות Android Debug Bridge (adb).

הדוגמה הבאה ממחישה איך להטמיע את הפרמטר הזה באפליקציה:

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
    if (aei.getReason() == REASON_CRASH_NATIVE) {
        // Get the tombstone input stream.
        InputStream trace = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

ניפוי באגים או בעיות בזיכרון נייטיב

כלי לחיטוי כתובות (HWASan/ASan)

HWAddress Sanitizer (HWASan) הכלי ניקוי כתובות (ASan) דומה ל-Valgrind, אבל מהיר יותר באופן משמעותי ונתמך בצורה הרבה יותר טובה ב-Android.

זו האפשרות הטובה ביותר לניפוי באגים במקרים של שגיאות זיכרון ב-Android.

ניפוי באגים מסוג Malloc

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

קטעי הוק (hooks) מסוג Malloc

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

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

Android תומך ב mallinfo(3) וגם malloc_info(3) תוספים אל <malloc.h>.

הפונקציונליות של malloc_info זמינה ב-Android 6.0 (Marshmallow) וב- וסכימת ה-XML שלה מתועדת malloc.h הכותרת.

יצירת פרופילים

כדי ליצור פרופיל במעבד (CPU) של קוד נייטיב, אפשר להשתמש ב-Simpleperf.