تحديد المشاكل وحلّها في Crashlytics والأسئلة الشائعة بشأنها
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تقدّم هذه الصفحة مساعدة في تحديد المشاكل وحلّها وإجابات عن الأسئلة الشائعة.
حول استخدام Crashlytics. إذا كنت
يتعذّر عليك العثور على ما تبحث عنه أو تحتاج إلى مزيد من المساعدة، يُرجى الاتصال
دعم Firebase:
الإجراءات العامّة لتحديد المشاكل وحلّها/الأسئلة الشائعة
ظهور تنسيقات مختلفة
(و "الاختلافات أحيانًا") في بعض المشاكل ضمن جدول المشاكل.
قد تلاحظ تنسيقين مختلفين للمشاكل المدرجة في جدول المشاكل.
في وحدة تحكُّم Firebase. وقد تلاحظ أيضًا ميزة تسمى
"المتغيرات" ضمن بعض مشكلاتك. إليك السبب.
في أوائل العام 2023، طرحنا محرّك تحليل محسّن لتجميع الأحداث
بالإضافة إلى تصميم محدّث وبعض الميزات المتقدمة للمشكلات الجديدة (مثل
من الأشكال المختلفة!). اطّلِع على أحدث فيديوهاتنا
مشاركة مدونة
عن جميع التفاصيل، ولكن يمكنك قراءة أدناه للحصول على النقاط البارزة.
يحلل Crashlytics جميع الأحداث في تطبيقك (مثل حالات التعطّل، والمحتوى غير الفادح،
وأخطاء ANR) وينشئ مجموعات من الأحداث باسم المشاكل، وهي كل الأحداث في
المشكلات لديك نقطة شائعة من الفشل.
لتجميع الأحداث في هذه المشاكل، يختبر محرك التحليل المحسّن الآن
على العديد من جوانب الحدث، بما في ذلك الإطارات في تقرير تتبُّع تسلسل استدعاء الدوال البرمجية،
ورسالة الاستثناء ورمز الخطأ والنظام الأساسي أو نوع الخطأ الآخر
وسماتها الشخصية.
ومع ذلك، في هذه المجموعة من الأحداث، يؤدي تتبع تسلسل استدعاء الدوال البرمجية إلى حدوث تعذُّر
قد يكون مختلفًا. وقد يؤدي اختلاف عملية تتبُّع تسلسل استدعاء الدوال البرمجية إلى سبب أساسي مختلف.
لتمثيل هذا الاختلاف المحتمل ضمن مشكلة، ننشئ الآن
خيارات المنتج ضمن المشاكل: كل صيغة هي مجموعة فرعية من الأحداث في مشكلة معيّنة
التي لها نقطة العطل نفسها وتتبُّع تسلسل استدعاء الدوال البرمجية مشابهًا. مع متغيرات
يمكنك تصحيح الأخطاء في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية الأكثر شيوعًا ضمن المشكلة وتحديد ما إذا كان
الأسباب الجذرية المختلفة تؤدي إلى الإخفاق.
في ما يلي تجربتك هذه التحسينات:
البيانات الوصفية المجدَّدة المعروضة ضمن صف المشكلة أصبح من السهل فهم المشاكل وتصنيفها في تطبيقك.
انخفاض عدد المشاكل المكرّرة لا يؤدي تغيير رقم السطر إلى حدوث مشكلة جديدة.
تصحيح الأخطاء بسهولة أكبر في ما يتعلق بالمشاكل المعقّدة ذات الأسباب الجذرية المتنوعة استخدِم الصيغ لتصحيح أخطاء عمليات تتبُّع تسلسل استدعاء الدوال البرمجية الأكثر شيوعًا ضمن مشكلة معيّنة.
تنبيهات وإشارات أكثر فائدة تشير المشكلة الجديدة إلى خطأ جديد.
بحث أكثر فعالية تحتوي كل مشكلة على بيانات وصفية أكثر قابلية للبحث
مثل نوع الاستثناء واسم الحزمة.
في ما يلي طريقة طرح هذه التحسينات:
عندما نتلقّى أحداثًا جديدة من تطبيقك، سنتحقّق مما إذا كانت تتطابق مع حدث حالي.
المشكلة.
إذا لم يتم العثور على نتيجة مطابِقة، سنطبّق تلقائيًا طريقة التجميع الأذكى للأحداث إلى مجموعات
على الحدث وإنشاء مشكلة جديدة في البيانات الوصفية التي تم تجديدها
التصميم.
هذا هو أول تحديث مهم نجريه على تجميع الفعاليات. إذا كنت
إذا كانت لديك ملاحظات أو واجهت أي مشاكل، يُرجى إبلاغنا بها من خلال
تقديم بلاغ.
لا أرى
مقاييس خالية من الأعطال و/أو تنبيهات السرعة
إذا لم تظهر لك مقاييس خالية من الأعطال (مثل الجلسات والمستخدمين الذين لم تواجههم أعطال)
و/أو تنبيهات السرعة، فتأكد من استخدام
Crashlytics SDK v18.6.0+ (أو Firebase BoM v32.6.0+ )
عدم ظهور سجلّات شريط التنقّل
إذا كنت لا ترى
سجلات شريط التنقل
ننصحك بالتحقّق من إعدادات تطبيقك في "إحصاءات Google"
احرص على استيفاء المتطلبات التالية:
تأكَّد بشكل خاص من أنك تستخدم على الأقل الإصدار التالي من
حزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصّة بخدمة "إحصاءات Google": 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) لنظام التشغيل Android في Crashlytics
إصدار المكوّن الإضافي Crashlytics Gradle
إذا لم تظهر لك أخطاء BuildId لنظام التشغيل Android 11 وبعض أخطاء ANR في Android 12، يُرجى اتّباع الخطوات التالية:
فمن المحتمل أنك تستخدم إصدارًا قديمًا من حزمة SDK أو مكوّنًا إضافيًا من Gradle أو كليهما.
لجمع أخطاء BuildId بشكل صحيح لأخطاء ANR هذه، عليك استخدام ما يلي:
الإصدارات:
الإصدار 18.3.5 من حزمة تطوير البرامج (SDK) لنظام التشغيل Android من Crashlytics (الإصدار 31.2.2 أو الأحدث من Firebase BoM)
الإصدار 2.9.4 من المكوّن الإضافي Crashlytics 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 والإبلاغ عنها يُبلغ Crashlytics عن أخطاء ANR عند استخدام التطبيق
بعد ذلك، بينما ترسل مؤشرات 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 يدويًا أو تعديل الملف.
من خلال سطر الأوامر. على سبيل المثال، لتحديد المسار عبر الأمر
سطر، استخدم أمرًا مثل ما يلي:
أسباب ظهور الأعطال
من .kt ملف تم تصنيفها على أنّها مشاكل .java؟
عندما يستخدم أحد التطبيقات أداة إخفاء مفاتيح فك التشفير لا تكشف امتداد الملف،
ينشئ Crashlytics كل مشكلة بامتداد ملف .java تلقائيًا.
وحيث إن Crashlytics يمكن أن ينشأ مشكلات بامتداد الملف الصحيح،
تأكَّد من أنّ تطبيقك يستخدم الإعداد التالي:
يتم استخدام الإصدار 4.2.0 من نظام Gradle المتوافق مع Android أو الإصدارات الأحدث.
يتم استخدام R8 مع تفعيل إخفاء مفاتيح فك التشفير. لتحديث التطبيق إلى الإصدار R8، يُرجى اتّباع الخطوات التالية:
المستندات.
تجدر الإشارة إلى أنّه بعد التحديث إلى الإعداد الموضّح أعلاه، قد تبدأ في مشاهدة
.kt مشاكل جديدة تمثل مشاكل .java حالية. يمكنك الاطّلاع على
الأسئلة الشائعة للاطّلاع على المزيد من المعلومات حول هذه الحالة
لماذا أرى
.kt مشاكل هي نُسخ مكررة من المشاكل الحالية
.java مشكلة؟
اعتبارًا من منتصف شهر كانون الأول (ديسمبر) 2021، حسّنت Crashlytics دعم التطبيقات.
التي تستخدم Kotlin.
حتى وقت قريب، لم تكشف أدوات التشويش المتاحة امتداد الملف، لذا
أنشأ تطبيق Crashlytics تلقائيًا كل مشكلة بامتداد ملف .java.
ومع ذلك، اعتبارًا من الإصدار 4.2.0 من نظام Gradle المتوافق مع Android، أصبحت R8 متوافقة مع امتدادات الملفات.
من خلال هذا التحديث، يمكن لتطبيق Crashlytics الآن تحديد ما إذا تم استخدام كل فئة ضمن
التطبيق مكتوب بلغة Kotlin ويتضمن اسم الملف الصحيح في المشكلة
التوقيع. تُنسب الأعطال الآن بشكل صحيح إلى .kt ملف (حسب الحاجة)
إذا كان تطبيقك يتضمّن الإعدادات التالية:
يستخدم تطبيقك الإصدار 4.2.0 من نظام التشغيل Android Gradle أو الإصدارات الأحدث.
يستخدم تطبيقك الإصدار R8 مع تفعيل ميزة إخفاء مفاتيح فك التشفير.
بما أنّ الأعطال الجديدة تتضمّن الآن امتداد الملف الصحيح في المشكلة
التوقيعات، قد تظهر لك مشاكل .kt جديدة هي في الواقع نُسخ مكررة من
المشاكل الحالية في التصنيف .java. في وحدة تحكم Firebase، نحاول تحديد
ونتواصل معك إذا كانت مشكلة .kt الجديدة تمثّل تكرارًا محتملاً لمشكلة
مشكلة حالية في التصنيف .java.
من يمكنه عرض الملاحظات وكتابتها وحذفها حول مشكلة ما؟
تسمح الملاحظات لأعضاء المشروع بالتعليق على مشكلات معينة بشأن الأسئلة والحالة
والتحديثات وما إلى ذلك.
عندما ينشر أحد أعضاء المشروع ملاحظة، يتم تصنيفها بعنوان البريد الإلكتروني من Google
الحساب. عنوان البريد الإلكتروني هذا مرئي، بالإضافة إلى الملاحظة، لجميع المشاريع
الأعضاء الذين لديهم إمكانية الدخول لعرض الملاحظة.
في ما يلي وصف إذن الوصول المطلوب للاطّلاع عليه والكتابة والحذف.
ملاحظات:
يمكن لأعضاء المشروع الذين لديهم أي من الأدوار التالية عرض العناصر الحالية وحذفها.
الملاحظات وكتابة ملاحظات جديدة حول مشكلة ما.
من يمكنه عرض الملاحظات وكتابتها وحذفها حول مشكلة ما؟
تسمح الملاحظات لأعضاء المشروع بالتعليق على مشكلات معينة بشأن الأسئلة والحالة
والتحديثات وما إلى ذلك.
عندما ينشر أحد أعضاء المشروع ملاحظة، يتم تصنيفها بعنوان البريد الإلكتروني من Google
الحساب. عنوان البريد الإلكتروني هذا مرئي، بالإضافة إلى الملاحظة، لجميع المشاريع
الأعضاء الذين لديهم إمكانية الدخول لعرض الملاحظة.
في ما يلي وصف إذن الوصول المطلوب للاطّلاع عليه والكتابة والحذف.
ملاحظات:
يمكن لأعضاء المشروع الذين لديهم أي من الأدوار التالية عرض العناصر الحالية وحذفها.
الملاحظات وكتابة ملاحظات جديدة حول مشكلة ما.
يستخدم التطبيق أيضًا
حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" لا تظهر أعطالاً
إذا كان مشروعك يستخدم Crashlytics إلى جانب حزمة "SDK لإعلانات Google على الأجهزة الجوّالة"،
فمن المحتمل أن يتدخل مراسلو الحوادث
تسجيل معالجات الاستثناء. لإصلاح المشكلة، يمكنك إيقاف ميزة الإبلاغ عن الأعطال في
SDK لإعلانات الأجهزة الجوّالة من خلال طلب disableSDKCrashReporting.
أين توجد مجموعة بيانات BigQuery؟
بعد ربط Crashlytics بـ BigQuery، يتم إنشاء مجموعات البيانات
تقع تلقائيًا في الولايات المتحدة، بغض النظر عن موقع
مشروع على Firebase.
دعم المنصة
هل يتيح تطبيق Crashlytics استخدام armeabi؟
لا يتوافق Firebase Crashlytics NDK مع ARMv5 (الذي يُشار إليه اختصارًا باسم Armeabi).
تمّت إزالة إمكانية استخدام واجهة التطبيق الثنائية (ABI) هذه اعتبارًا من الإصدار NDK r17.
المشاكل التي تم التراجع عنها
ما معنى الانحدار
المشكلة؟
تراجعت المشكلة عندما أنهيت المشكلة في السابق ولكن
ستتلقّى Crashlytics تقريرًا جديدًا يفيد بحدوث هذه المشكلة مرة أخرى.
يعيد تطبيق Crashlytics تلقائيًا فتح هذه المشاكل التي تراجعت،
ومعالجتها بالشكل المناسب لتطبيقك.
إليك مثال على سيناريو يشرح كيفية تصنيف تطبيق Crashlytics
كانحدار:
يتلقّى تطبيق Crashlytics لأول مرة تقرير أعطال عن الأعطال.
"A". يفتح Crashlytics مشكلة ذات صلة بهذا العطل (المشكلة "أ").
إصلاح هذا الخطأ بسرعة، وإغلاق المشكلة "أ"، ثم طرح إصدار جديد من
تطبيقك.
Crashlytics يحصل على تقرير آخر عن المشكلة "أ" بعد إغلاق
المشكلة.
إذا كان التقرير من إصدار تطبيق سبق أن تعرّف عليه تطبيق Crashlytics
عندما أنهيت المشكلة (مما يعني أن الإصدار قد حدث عطل)
عن أي عطل على الإطلاق)، فلن تراعي Crashlytics
المشكلة على أنها تراجعت. ستظل المشكلة مغلقة.
إذا كان التقرير صادرًا من إصدار تطبيق لم ينفّذه Crashlytics
إلى معرفة عند إغلاق المشكلة (ما يعني أنّ الإصدار
لم يرسل أي تقرير أعطال على الإطلاق)، ثم
يعتبر Crashlytics أن المشكلة قد تراجعت وتعيد فتح
المشكلة.
عندما تتراجع إحدى المشكلات، نرسل تنبيه كشف الانحدار ونضيف
إشارة انحدار إلى المشكلة لإعلامك بأنّ Crashlytics
أعاد فتح المشكلة. إذا لم تكن ترغب في إعادة فتح أحد المشكلات بسبب
خوارزمية الانحدار، "كتم الصوت" المشكلة بدلاً من إغلاقها.
لماذا أرى تراجعًا
في إصدارات التطبيق القديمة؟
إذا كان التقرير من إصدار تطبيق قديم لم يسبق له إرسال أي تقارير أعطال في
عندما أغلقت المشكلة، سينظر Crashlytics في المشكلة
التراجع عنه وإعادة فتح المشكلة.
يمكن أن يحدث هذا الموقف في الموقف التالي: لقد أصلحت خطأً
بإصدار جديد من تطبيقك، ولكن لا يزال لديك مستخدمون تستخدم إصدارات قديمة
بدون إصلاح الخطأ. وإذا لم يتم إرسال إحدى هذه النُسخ السابقة مطلقًا، عن طريق الصدفة
على الإطلاق عند إغلاق المشكلة، ويبدأ هؤلاء المستخدمون
الخطأ، فإن تقارير الأعطال هذه ستؤدي إلى ظهور مشكلة تراجع التراجع.
إذا كنت لا تريد إعادة فتح المشكلة بسبب خوارزمية الانحدار، يمكنك استخدام "كتم الصوت"
المشكلة بدلاً من إغلاقها.