تصحيح أخطاء مشروعك

تصحيح أخطاء الأعطال الأصلية

إذا كنت تواجه صعوبة في فهم ملف الذاكرة الأصلي للأعطال أو ملفات Sitemap، يمكنك الاستعانة بتصحيح أخطاء رمز نظام Android الأساسي الأصلي.

للحصول على كتالوج أكثر شمولاً للأنواع الشائعة من الأعطال وكيفية التحقيق فيها، يُرجى الاطّلاع على تشخيص الأعطال الأصلية.

يمكن أن تساعد أداة ndk-stack في ترميز الأعطال التي تواجهها. يمكنك تصحيح الأخطاء في "استوديو Android" كما هو موضّح في مستندات تصحيح أخطاء تطبيقك العامة. إذا كنت تفضّل استخدام سطر الأوامر، يتيح لك ndk-gdb إرفاق gdb أو lldb من واجهة الأوامر.

منح التطبيقات إمكانية الوصول المباشر إلى آثار ملفات Tombstone

بدءًا من نظام التشغيل Android 12 (المستوى 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) وAddress Sanitizer (ASan) مع Valgrind، ولكنهما أسرع بكثير وأفضل بكثير في نظام Android.

وهذا هو الخيار الأفضل لتصحيح أخطاء الذاكرة على Android.

تصحيح أخطاء تخصيص العملاء

يُرجى الاطّلاع على القسمين Malloc Debug و تتبُّع الذاكرة الأصلي باستخدام عمليات استدعاء libc للحصول على وصف شامل للخيارات المضمّنة في مكتبة C لتصحيح الأخطاء في الذاكرة الأصلية.

شماعات

إذا كنت تريد إنشاء أدواتك الخاصة، يتيح libc في Android أيضًا اعتراض جميع طلبات التخصيص/الاستدعاءات المجانية التي تحدث أثناء تنفيذ البرنامج. راجِع مستندات malloc_hooks للحصول على تعليمات الاستخدام.

إحصاءات مالوس

يتيح Android استخدام الإضافتَين mallinfo(3) وmalloc_info(3) إلى <malloc.h>.

تتوفّر وظائف malloc_info في نظام التشغيل Android 6.0 (Marshmallow) والإصدارات الأحدث، وقد تم توثيق مخطط XML الخاص به في عنوان Bionic malloc.h.

إنشاء ملفات تعريف

لتحليل الرموز البرمجية الأصلية لوحدة المعالجة المركزية (CPU)، يمكنك استخدام Simpleperf.