تحديد المشاكل وحلّها في Crashlytics والأسئلة الشائعة بشأنها
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تقدّم هذه الصفحة مساعدة في تحديد المشاكل وحلّها وإجابات عن الأسئلة الشائعة.
أسئلة حول استخدام Crashlytics. إذا كنت
يتعذّر عليك العثور على ما تبحث عنه أو تحتاج إلى مزيد من المساعدة، يُرجى الاتصال
دعم Firebase:
الإجراءات العامّة لتحديد المشاكل وحلّها/الأسئلة الشائعة
ظهور تنسيقات مختلفة
(و"الاختلافات أحيانًا") في بعض المشاكل ضمن جدول المشاكل.
قد تلاحظ تنسيقين مختلفين للمشاكل المدرجة في جدول المشاكل.
في وحدة تحكّم Firebase. وقد تلاحظ أيضًا ميزة تسمى
"المتغيرات" ضمن بعض مشكلاتك. إليك السبب.
في أوائل العام 2023، طرحنا محرّك تحليل محسّن لتجميع الأحداث
بالإضافة إلى تصميم محدّث وبعض الميزات المتقدمة للمشكلات الجديدة (مثل
من الأشكال المختلفة!). اطّلِع على أحدث فيديوهاتنا
مشاركة مدونة
عن جميع التفاصيل، ولكن يمكنك قراءة أدناه للحصول على النقاط البارزة.
يحلِّل Crashlytics جميع الأحداث في تطبيقك (مثل الأعطال أو غير الفادح أو
وأخطاء ANR) وينشئ مجموعات من الأحداث باسم المشاكل، وهي كل الأحداث في
المشكلات لديك نقطة شائعة من الفشل.
لتجميع الأحداث في هذه المشاكل، يختبر محرك التحليل المحسّن الآن
على العديد من جوانب الحدث، بما في ذلك الإطارات في تقرير تتبُّع تسلسل استدعاء الدوال البرمجية،
ورسالة الاستثناء ورمز الخطأ والنظام الأساسي أو نوع الخطأ الآخر
وسماتها الشخصية.
ومع ذلك، في هذه المجموعة من الأحداث، يؤدي تتبع تسلسل استدعاء الدوال البرمجية إلى حدوث تعذُّر
قد يكون مختلفًا. وقد يؤدي اختلاف عملية تتبُّع تسلسل استدعاء الدوال البرمجية إلى سبب أساسي مختلف.
لتمثيل هذا الاختلاف المحتمل ضمن مشكلة، ننشئ الآن
خيارات المنتج ضمن المشاكل: كل صيغة هي مجموعة فرعية من الأحداث في مشكلة معيّنة
التي لها نقطة العطل نفسها وتتبُّع تسلسل استدعاء الدوال البرمجية مشابهًا. مع متغيرات
يمكنك تصحيح الأخطاء في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية الأكثر شيوعًا ضمن المشكلة وتحديد ما إذا كان
الأسباب الجذرية المختلفة تؤدي إلى الإخفاق.
في ما يلي تجربتك هذه التحسينات:
البيانات الوصفية المجدَّدة المعروضة ضمن صف المشكلة أصبح من السهل فهم المشاكل وتصنيفها في تطبيقك.
انخفاض عدد المشاكل المكرّرة لا يؤدي تغيير رقم السطر إلى حدوث مشكلة جديدة.
تصحيح الأخطاء بسهولة أكبر في ما يتعلق بالمشاكل المعقّدة ذات الأسباب الجذرية المتنوعة استخدِم الصيغ لتصحيح أخطاء عمليات تتبُّع تسلسل استدعاء الدوال البرمجية الأكثر شيوعًا ضمن مشكلة معيَّنة.
تنبيهات وإشارات أكثر فائدة تشير المشكلة الجديدة إلى خطأ جديد.
بحث أكثر فعالية تحتوي كل مشكلة على بيانات وصفية أكثر قابلية للبحث
مثل نوع الاستثناء واسم الحزمة.
في ما يلي طريقة طرح هذه التحسينات:
عندما نتلقّى أحداثًا جديدة من تطبيقك، سنتحقّق مما إذا كانت تتطابق مع حدث حالي.
المشكلة.
إذا لم يتم العثور على نتيجة مطابِقة، سنطبّق تلقائيًا طريقة التجميع الأذكى للأحداث إلى مجموعات
على الحدث وإنشاء مشكلة جديدة في البيانات الوصفية التي تم تجديدها
التصميم.
هذا هو أول تحديث مهم نجريه على تجميع الفعاليات. إذا كنت
إذا كانت لديك ملاحظات أو واجهت أي مشاكل، يُرجى إبلاغنا بها من خلال
تقديم بلاغ.
لا أرى
مقاييس خالية من الأعطال و/أو تنبيهات السرعة
إذا لم تظهر لك مقاييس خالية من الأعطال (مثل الجلسات والمستخدمين الذين لم تواجههم أعطال)
و/أو تنبيهات السرعة، فتأكد من استخدام
حزمة تطوير البرامج (SDK) لـ Crashlytics الإصدار 18.6.0 أو الإصدارات الأحدث (أو Firebase BoM v32.6.0 أو الإصدارات الأحدث).
عدم ظهور سجلّات شريط التنقّل
إذا كنت لا ترى
سجلات شريط التنقل
ننصحك بالتحقّق من إعدادات تطبيقك لـ Google Analytics.
احرص على استيفاء المتطلبات التالية:
تأكَّد بشكل خاص من أنك تستخدم على الأقل الإصدار التالي من
حزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصة بالإصدار Google Analytics: Android: الإصدار 17.2.3 أو الإصدارات الأحدث(الإصدار 24.7.1 من BoM أو الإصدارات الأحدث)
لماذا تظهر أخطاء ANR فقط؟
تم الإبلاغ عنه لنظام التشغيل Android 11 والإصدارات الأحدث؟
تتيح ميزة "Crashlytics" إعداد تقارير أخطاء ANR لتطبيقات Android من الأجهزة التي يتم تشغيلها.
الإصدار 11 من نظام Android والإصدارات الأحدث واجهة برمجة التطبيقات الأساسية التي نستخدمها لجمع أخطاء ANR
(getHistoryProcessExitStatuss )
أكثر موثوقية من المناهج القائمة على SIGQUIT أو مراقب النظام. واجهة برمجة التطبيقات هذه
تتوفّر هذه الميزة فقط على أجهزة Android 11 والإصدارات الأحدث.
سبب عدم ظهور بعض أخطاء ANR
BuildId؟
في حال عدم توفّر أخطاء BuildId في بعض أخطاء ANR، يمكنك تحديد المشاكل وحلّها كما يلي:
تأكَّد من استخدام أحدث حزمة تطوير برامج (SDK) لنظام التشغيل Crashlytics Android.
Crashlytics إصدار المكوّن الإضافي لنظام Gradle
إذا لم تظهر لك أخطاء BuildId لنظام التشغيل Android 11 وبعض أخطاء ANR في Android 12، يُرجى اتّباع الخطوات التالية:
فمن المحتمل أنك تستخدم إصدارًا قديمًا من حزمة SDK أو مكوّنًا إضافيًا من Gradle أو كليهما.
لجمع أخطاء BuildId بشكل صحيح لأخطاء ANR هذه، عليك استخدام ما يلي:
الإصدارات:
Crashlytics الإصدار 18.3.5 من حزمة تطوير البرامج (SDK) لنظام التشغيل Android (الإصدار 31.2.2 أو الإصدارات الأحدث من Firebase BoM)
Crashlytics الإصدار 2.9.4 من المكوّن الإضافي Gradle أو الإصدارات الأحدث
تحقّق مما إذا كنت تستخدم موقعًا جغرافيًا غير عادي لمكتباتك المشتركة.
في حال عدم توفّر BuildId إلا للمكتبات المشتركة في تطبيقك، من المحتمل أن
عدم استخدام الموقع الافتراضي القياسي للمكتبات المشتركة. في حال حذف
هذا هو الحال، ثم قد لا يتمكن Crashlytics من تحديد موقع
BuildId المرتبطة. ننصحك بالتفكير في استخدام المعيار
مكان المكتبات المشتركة.
تأكَّد من عدم إزالة BuildId أثناء عملية التصميم.
تجدر الإشارة إلى أنّ النصائح التالية لتحديد المشاكل وحلّها تنطبق على أخطاء ANR والأخطاء الأصلية
الأعطال.
تحقق من وجود BuildId من خلال تشغيل readelf -n على برامجك الثنائية. في حال حذف
BuildId غير موجودة، ثم أضف -Wl,--build-id إلى علامات
نظام التصميم.
التأكد من عدم إزالة BuildId عن غير قصد جهدًا
لتقليل حجم APK.
إذا احتفظت بنسخ من المكتبة مقتطعة وغير مخططة، فاحرص على
يشير إلى الإصدار الصحيح في التعليمات البرمجية.
الاختلافات
بين تقارير أخطاء ANR في لوحة بيانات "Crashlytics"
أداة Google Play Console
قد يكون هناك عدم تطابق بين عدد أخطاء ANR بين Google Play
Crashlytics وهذا أمر متوقَّع بسبب الاختلاف في آلية
وجمع بيانات ANR والإبلاغ عنها يتم الإبلاغ عن أخطاء ANR عند استخدام التطبيق من قِبل "Crashlytics"
بعد ذلك، بينما ترسل مؤشرات Android الحيوية بيانات ANR بعد حدوث خطأ ANR.
بالإضافة إلى ذلك، لا يعرض تطبيق "Crashlytics" إلا أخطاء ANR التي تحدث على الأجهزة التي تعمل.
Android 11 والإصدارات الأحدث، مقارنةً بـ Google Play الذي يعرض أخطاء ANR من الأجهزة التي تحتوي على
تم قبول الموافقة على جمع البيانات و"خدمات Google Play".
الاختلافات
بين عمليات تتبُّع تسلسل استدعاء الدوال البرمجية NDK في لوحة بيانات Crashlytics وأداة Logcat
لكل من سلسلتَي أدوات LLVM وGNU إعدادات تلقائية ومعالجات مختلفة للقراءة فقط.
برامج ثنائية في تطبيقك، ما قد يؤدي إلى إنشاء عمليات تتبُّع تسلسل استدعاء الدوال البرمجية غير متسقة
في وحدة تحكّم Firebase. للحدّ من هذه المشكلة، أضِف علامات الربط التالية.
في عملية التصميم:
إذا كنت تستخدم رابط lld من سلسلة أدوات LLVM، أضِف ما يلي:
-Wl,--no-rosegment
إذا كنت تستخدم رابط ld.gold من سلسلة أدوات GNU، أضِف ما يلي:
-Wl,--rosegment
في حال استمرار ظهور تناقضات في تتبُّع تسلسل استدعاء الدوال البرمجية (أو إذا لم
ذات الصلة بسلسلة أدواتك)، فحاول إضافة ما يلي إلى عملية التصميم
بدلاً من ذلك:
-fno-omit-frame-pointer
كيف أستخدم
البرنامج الثنائي لمنشئ ملف رموز Breakpad لـ NDK؟
يجمع المكوّن الإضافي Crashlyticsمنشئ ملفات رموز Breakpad المخصّص
وإذا كنت تفضّل استخدام برنامجك الثنائي لإنشاء ملفات رموز لوحة الإيقاف،
على سبيل المثال، إذا كنت تفضل إنشاء جميع الملفات التنفيذية الأصلية في سلسلة الإصدار من
المصدر)، يُرجى استخدام سمة الإضافة symbolGeneratorBinary الاختيارية لتحديد
المسار إلى الملف التنفيذي.
يمكنك تحديد مسار البرنامج الثنائي لمنشئ ملف رمز Breakpad في
بطريقتين:
الخيار 1: تحديد المسار من خلال firebaseCrashlytics
الإضافة في ملف build.gradle
أضِف ما يلي إلى ملف build.gradle.kts على مستوى التطبيق:
الإصدار 3.0.0 من المكوّن الإضافي Gradle أو الإصدارات الأحدث
android {
buildTypes {
release {
configure<CrashlyticsExtension> {
nativeSymbolUploadEnabled = true
// Add these optional fields to specify the path to the executable
symbolGeneratorType = "breakpad"
breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS")
}
}
}
}
الإصدارات الأقدم للمكوّنات الإضافية
android {
// ...
buildTypes {
// ...
release {
// ...
firebaseCrashlytics {
// existing; required for either symbol file generator
nativeSymbolUploadEnabled true
// Add this optional new block to specify the path to the executable
symbolGenerator {
breakpad {
binary file("/PATH/TO/BREAKPAD/DUMP_SYMS")
}
}
}
}
}
الخيار 2: تحديد المسار من خلال خط خاصية في Gradle
ملف الخصائص
يمكنك استخدام com.google.firebase.crashlytics.breakpadBinary.
لتحديد المسار إلى الملف التنفيذي.
يمكنك تعديل ملف خصائص Gradle يدويًا أو تعديل الملف.
من خلال سطر الأوامر. على سبيل المثال، لتحديد المسار عبر الأمر
سطر، استخدم أمرًا مثل ما يلي:
إذا ظهر لك الاستثناء التالي، من المحتمل أنّك تستخدم إصدارًا من
تطبيق DexGuard غير المتوافق مع حزمة تطوير البرامج (SDK) لنظام التشغيل Firebase Crashlytics:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
لا يؤدي هذا الاستثناء إلى إيقاف تطبيقك، ولكنه يمنعه من إرسال الأعطال.
التقارير. لحلّ هذه المشكلة، يُرجى اتّباع الخطوات التالية:
تأكَّد من استخدام أحدث إصدار من DexGuard 8.x. أحدث إصدار
يحتوي على قواعد مطلوبة في حزمة تطوير البرامج (SDK) Firebase Crashlytics.
إذا لم تكن تريد تغيير إصدار DexGuard، جرِّب إضافة ما يلي:
إلى قواعد التشويش (في ملف إعداد DexGuard):
أسباب ظهور الأعطال
من .kt ملف تم تصنيفها على أنّها مشاكل .java؟
عندما يستخدم أحد التطبيقات أداة إخفاء مفاتيح فك التشفير لا تكشف امتداد الملف،
تنشئ الأداة Crashlytics كل مشكلة بامتداد الملف .java تلقائيًا.
كي يتمكّن Crashlytics من حدوث مشاكل عند استخدام امتداد الملف الصحيح،
تأكَّد من أنّ تطبيقك يستخدم الإعداد التالي:
يتم استخدام الإصدار 4.2.0 من نظام Gradle المتوافق مع Android أو الإصدارات الأحدث.
يتم استخدام R8 مع تفعيل إخفاء مفاتيح فك التشفير. لتحديث التطبيق إلى الإصدار R8، يُرجى اتّباع الخطوات التالية:
المستندات.
تجدر الإشارة إلى أنّه بعد التحديث إلى الإعداد الموضّح أعلاه، قد تبدأ في مشاهدة
.kt مشاكل جديدة تمثل مشاكل .java حالية. يمكنك الاطّلاع على
الأسئلة الشائعة للاطّلاع على المزيد من المعلومات حول هذه الحالة
لماذا أرى
.kt مشاكل هي نُسخ مكررة من المشاكل الحالية
.java مشكلة؟
اعتبارًا من منتصف كانون الأول (ديسمبر) 2021، تم تحسين التوافق مع التطبيقات من قِبل "Crashlytics".
التي تستخدم Kotlin.
حتى وقت قريب، لم تكشف أدوات التشويش المتاحة امتداد الملف، لذا
تم إنشاء كل مشكلة بامتداد الملف .java تلقائيًا من قِبل "Crashlytics".
ومع ذلك، اعتبارًا من الإصدار 4.2.0 من نظام Gradle المتوافق مع Android، أصبحت R8 متوافقة مع امتدادات الملفات.
من خلال هذا التعديل، يستطيع "Crashlytics" الآن تحديد ما إذا تم استخدام كل صف ضمن
التطبيق مكتوب بلغة Kotlin ويتضمن اسم الملف الصحيح في المشكلة
التوقيع. تُنسب الأعطال الآن بشكل صحيح إلى .kt ملف (حسب الحاجة)
إذا كان تطبيقك يتضمّن الإعدادات التالية:
يستخدم تطبيقك الإصدار 4.2.0 من نظام التشغيل Android Gradle أو الإصدارات الأحدث.
يستخدم تطبيقك الإصدار R8 مع تفعيل ميزة إخفاء مفاتيح فك التشفير.
بما أنّ الأعطال الجديدة تتضمّن الآن امتداد الملف الصحيح في المشكلة
التوقيعات، قد تظهر لك مشاكل .kt جديدة هي في الواقع نُسخ مكررة من
المشاكل الحالية في التصنيف .java. في وحدة تحكّم Firebase، نحاول تحديد
ونتواصل معك إذا كانت مشكلة .kt الجديدة تمثّل تكرارًا محتملاً
مشكلة حالية من النوع .java.
من يمكنه عرض الملاحظات وكتابتها وحذفها حول مشكلة ما؟
تسمح الملاحظات لأعضاء المشروع بالتعليق على مشكلات معينة بشأن الأسئلة والحالة
والتحديثات وما إلى ذلك.
عندما ينشر أحد أعضاء المشروع ملاحظة، يتم تصنيفها بعنوان البريد الإلكتروني من Google
الحساب. عنوان البريد الإلكتروني هذا مرئي، بالإضافة إلى الملاحظة، لجميع المشاريع
الأعضاء الذين لديهم إمكانية الدخول لعرض الملاحظة.
في ما يلي وصف إذن الوصول المطلوب للاطّلاع عليه والكتابة والحذف.
ملاحظات:
يمكن لأعضاء المشروع الذين لديهم أي من الأدوار التالية عرض العناصر الحالية وحذفها.
الملاحظات وكتابة ملاحظات جديدة حول مشكلة ما.
من يمكنه عرض الملاحظات وكتابتها وحذفها حول مشكلة ما؟
تسمح الملاحظات لأعضاء المشروع بالتعليق على مشكلات معينة بشأن الأسئلة والحالة
والتحديثات وما إلى ذلك.
عندما ينشر أحد أعضاء المشروع ملاحظة، يتم تصنيفها بعنوان البريد الإلكتروني من Google
الحساب. عنوان البريد الإلكتروني هذا مرئي، بالإضافة إلى الملاحظة، لجميع المشاريع
الأعضاء الذين لديهم إمكانية الدخول لعرض الملاحظة.
في ما يلي وصف إذن الوصول المطلوب للاطّلاع عليه والكتابة والحذف.
ملاحظات:
يمكن لأعضاء المشروع الذين لديهم أي من الأدوار التالية عرض العناصر الحالية وحذفها.
الملاحظات وكتابة ملاحظات جديدة حول مشكلة ما.
يستخدم التطبيق أيضًا
حزمة تطوير برامج (SDK) واحدة (Google Mobile Ads) لا تظهر أعطالاً
إذا كان مشروعك يستخدم حزمة "Crashlytics" مع حزمة تطوير البرامج (SDK) "Google Mobile Ads"،
فمن المحتمل أن يتدخل مراسلو الحوادث
تسجيل معالجات الاستثناء. لإصلاح المشكلة، يمكنك إيقاف ميزة الإبلاغ عن الأعطال في
حزمة تطوير البرامج (SDK) Mobile Ads من خلال طلب disableSDKCrashReporting.
أين توجد مجموعة بيانات BigQuery؟
بعد ربط Crashlytics بأداة BigQuery، يتم حذف مجموعات البيانات الجديدة التي تنشئها.
تقع تلقائيًا في الولايات المتحدة، بغض النظر عن موقع
مشروع على Firebase.
دعم المنصة
هل يتوافق Crashlytics مع armeabi؟
لا يتوافق NDK مع Firebase Crashlytics مع ARMv5 (الأرميabi).
تمّت إزالة إمكانية استخدام واجهة التطبيق الثنائية (ABI) هذه اعتبارًا من الإصدار NDK r17.
المشاكل التي تم التراجع عنها
ما معنى الانحدار
المشكلة؟
تراجعت المشكلة عندما أنهيت المشكلة في السابق ولكن
يتلقّى "Crashlytics" تقريرًا جديدًا بحدوث هذه المشكلة مرة أخرى.
تعيد خدمة Crashlytics تلقائيًا فتح هذه المشاكل التي تراجعت تراجعًا، بحيث يمكنك
ومعالجتها بالشكل المناسب لتطبيقك.
في ما يلي مثال على سيناريو يشرح طريقة تصنيف Crashlytics لـ
كانحدار:
لأول مرة على الإطلاق، يتلقّى Crashlytics تقرير أعطال بشأن حوادث السير.
"A". يفتح Crashlytics مشكلة مقابلة لهذا العُطل (المشكلة "أ").
إصلاح هذا الخطأ بسرعة، وإغلاق المشكلة "أ"، ثم طرح إصدار جديد من
تطبيقك.
تلقّي "Crashlytics" تقريرًا آخر عن المشكلة "أ" بعد إغلاق
المشكلة.
إذا كان التقرير من إصدار تطبيق Crashlyticsكان على علم به
عندما أنهيت المشكلة (مما يعني أن الإصدار قد حدث عطل)
عن أي عطل على الإطلاق)، فلن تراعي Crashlytics
المشكلة على أنها تراجعت. ستظل المشكلة مغلقة.
إذا كان التقرير من إصدار تطبيق Crashlyticsلم ليس
إلى معرفة عند إنهاء المشكلة (أي أنّ الإصدار احتوى على
لم يرسل أي تقرير أعطال على الإطلاق)، ثم
تعتبر الإضافة "Crashlytics" أنّ المشكلة قد تراجعت، وسيعيد فتح
المشكلة.
عندما تتراجع إحدى المشكلات، نرسل تنبيه كشف الانحدار ونضيف
إشارة تراجع إلى المشكلة، لإعلامك بأنّ Crashlytics
أعاد فتح المشكلة. إذا لم تكن ترغب في إعادة فتح أحد المشكلات بسبب
خوارزمية الانحدار، "كتم الصوت" المشكلة بدلاً من إغلاقها.
لماذا أرى تراجعًا
في إصدارات التطبيق القديمة؟
إذا كان التقرير من إصدار تطبيق قديم لم يسبق له إرسال أي تقارير أعطال في
كل ذلك عند إغلاق المشكلة، سينظر Crashlytics في المشكلة.
التراجع عنه وإعادة فتح المشكلة.
يمكن أن يحدث هذا الموقف في الموقف التالي: لقد أصلحت خطأً
بإصدار جديد من تطبيقك، ولكن لا يزال لديك مستخدمون تستخدم إصدارات قديمة
بدون إصلاح الخطأ. وإذا لم يتم إرسال إحدى هذه النُسخ السابقة مطلقًا، عن طريق الصدفة
على الإطلاق عند إغلاق المشكلة، ويبدأ هؤلاء المستخدمون
الخطأ، فإن تقارير الأعطال هذه ستؤدي إلى ظهور مشكلة تراجع التراجع.
إذا كنت لا تريد إعادة فتح المشكلة بسبب خوارزمية الانحدار، يمكنك استخدام "كتم الصوت"
المشكلة بدلاً من إغلاقها.