پروژه خود را اشکال زدایی کنید

اشکال زدایی خرابی های بومی

اگر برای درک یک خرابی بومی یا سنگ قبر مشکل دارید، Debugging Native Platform Android Code مقدمه خوبی است.

برای کاتالوگ کامل‌تر از انواع رایج خرابی و نحوه بررسی آنها، به تشخیص خرابی‌های بومی مراجعه کنید.

ابزار ndk-stack می تواند به نماد خرابی های شما کمک کند. می‌توانید خرابی‌ها را در Android Studio همان‌طور که در سند کلی «اشکال‌زدایی» برنامه‌تان توضیح داده شده است، اشکال‌زدایی کنید. اگر ترجیح می دهید از خط فرمان استفاده کنید، ndk-gdb به شما امکان می دهد gdb یا lldb از پوسته خود متصل کنید.

دسترسی مستقیم به آثار سنگ قبر را برای برنامه‌ها فراهم کنید

با شروع Android 12 (سطح API 31)، می‌توانید از طریق روش ApplicationExitInfo.getTraceInputStream() به سنگ قبر اصلی خرابی برنامه خود به عنوان بافر پروتکل دسترسی داشته باشید. بافر پروتکل با استفاده از این طرح سریالی می شود. پیش از این، تنها راه دسترسی به این اطلاعات از طریق پل اشکال زدایی اندروید (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) و Address Sanitizer (ASan) مشابه Valgrind هستند، اما به طور قابل توجهی سریعتر و بسیار بهتر در Android پشتیبانی می شوند.

اینها بهترین گزینه شما برای رفع اشکال خطاهای حافظه در اندروید هستند.

اشکال زدایی Malloc

برای توضیح کامل گزینه‌های داخلی کتابخانه C برای اشکال‌زدایی مشکلات حافظه بومی، Malloc Debug و Native Memory Tracking با استفاده از libc Callbacks را ببینید.

قلاب مالوک

اگر می‌خواهید ابزارهای خود را بسازید، libc اندروید از رهگیری همه تماس‌های تخصیص/رایگانی که در طول اجرای برنامه اتفاق می‌افتد نیز پشتیبانی می‌کند. برای دستورالعمل های استفاده به مستندات malloc_hooks مراجعه کنید.

آمار Malloc

Android از پسوندهای mallinfo(3) و malloc_info(3) برای <malloc.h> پشتیبانی می‌کند.

عملکرد malloc_info در Android 6.0 (Marshmallow) و بالاتر موجود است و طرح XML آن در هدر malloc.h Bionic مستند شده است.

پروفایل کردن

برای پروفایل CPU کد بومی، می توانید از Simpleperf استفاده کنید.