ניפוי באגים בפרויקט
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
ניפוי באגים בקריסות נייטיב
אם קשה לכם להבין את אתר התאונה או מצבה,
ניפוי באגים בקוד פלטפורמה מקורי של 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.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Debug your project\n\nDebug native crashes\n--------------------\n\nIf you're struggling to understand a native crash dump or tombstone,\n[Debugging Native Android Platform Code](https://source.android.com/devices/tech/debug/index.html)\nis a good introduction.\n\nFor a fuller catalog of common types of crash and how to investigate them, see\n[Diagnosing Native Crashes](https://source.android.com/devices/tech/debug/native-crash).\n\nThe [ndk-stack](/ndk/guides/ndk-stack) tool can help symbolize your crashes.\nYou can debug crashes in Android Studio as described in the general\n[Debug your app](/studio/debug) documentation. If you prefer to use the\ncommand-line, [ndk-gdb](/ndk/guides/ndk-gdb) lets you attach either `gdb` or\n`lldb` from your shell.\n\n### Provide apps direct access to tombstone traces\n\nStarting in Android 12 (API level 31), you can access your app's native crash\ntombstone as a\n[protocol buffer](https://developers.google.com/protocol-buffers/) through the\n[`ApplicationExitInfo.getTraceInputStream()`](/reference/android/app/ApplicationExitInfo#getTraceInputStream())\nmethod. The protocol buffer is serialized using [this schema](https://android.googlesource.com/platform/system/core/+/refs/heads/main/debuggerd/proto/tombstone.proto).\nPreviously, the only way to get access to this information was through the\n[Android Debug Bridge](/studio/command-line/adb) (adb).\n\nHere's an example of how to implement this in your app: \n\n ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);\n MutableList\u003cApplicationExitInfo\u003e exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);\n for (ApplicationExitInfo aei: exitReasons) {\n if (aei.getReason() == REASON_CRASH_NATIVE) {\n // Get the tombstone input stream.\n InputStream trace = aei.getTraceInputStream();\n // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.\n Tombstone tombstone = Tombstone.parseFrom(trace);\n }\n }\n\nDebug native memory issues\n--------------------------\n\n### Address Sanitizer (HWASan/ASan)\n\n[HWAddress Sanitizer](/ndk/guides/hwasan) (HWASan) and\n[Address Sanitizer](/ndk/guides/asan) (ASan) are similar to Valgrind, but\nsignificantly faster and much better supported on Android.\n\nThese are your best option for debugging memory errors on Android.\n\n### Malloc debug\n\nSee\n[Malloc Debug](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_debug/README.md)\nand\n[Native Memory Tracking using libc Callbacks](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_debug/README_api.md)\nfor a thorough description of the C library's built-in options for debugging\nnative memory issues.\n\n### Malloc hooks\n\nIf you want to build your own tools, Android's libc also supports intercepting\nall allocation/free calls that happen during program execution. See the\n[malloc_hooks documentation](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_hooks/README.md)\nfor usage instructions.\n\n### Malloc statistics\n\nAndroid supports the\n[mallinfo(3)](http://man7.org/linux/man-pages/man3/mallinfo.3.html)\nand\n[malloc_info(3)](http://man7.org/linux/man-pages/man3/malloc_info.3.html)\nextensions to `\u003cmalloc.h\u003e`.\n\nThe `malloc_info` functionality is available in Android 6.0 (Marshmallow) and\nhigher and its XML schema is documented in Bionic's\n[malloc.h](https://android.googlesource.com/platform/bionic/+/main/libc/include/malloc.h)\nheader.\n\nProfiling\n---------\n\nFor CPU profiling of native code, you can use [Simpleperf](/ndk/guides/simpleperf)."]]