ReactNative/symbolication

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

ترجمة عناوين Symbolicating تتبّع المكدس

إن ألقى تطبيق React Native اعتراضًا ليس معالَجًا في إصدار البناء، فقد يكون الخرج غامضًا ويصعب قراءته:

07-15 10:58:25.820 18979 18998 E AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
07-15 10:58:25.820 18979 18998 E AndroidRuntime: Process: com.awesomeproject, PID: 18979 07-15 10:58:25.820 18979 18998 E AndroidRuntime: com.facebook.react.common.JavascriptException: Failed, js engine: hermes, stack:
07-15 10:58:25.820 18979 18998 E AndroidRuntime: p@1:132161
07-15 10:58:25.820 18979 18998 E AndroidRuntime: p@1:132084
07-15 10:58:25.820 18979 18998 E AndroidRuntime: f@1:131854
07-15 10:58:25.820 18979 18998 E AndroidRuntime: anonymous@1:131119

الأقسام كالقسم p@1:132161 هي أسماء دوال مصغَّرة وإزاحات شيفرة ثنائية. قد ترغب بدلًا من ذلك في ترجمتها إلى ملف وسطر واسم دالة مثل: AwesomeProject/App.js:54:initializeMap. تُعرف هذه العملية باسم symbolication. يمكنك ترجمة أسماء الدوال المصغرة والشيفرة الثنائية كالواردة أعلاه عن طريق تمرير metro-symbolicate لخارطة المصدر المُنشَأة وتتبّع المكدس stack trace.

تُثبَّت حزمة metro-symbolicate افتراضيًا في قالب مشروع React Native من خلال إعداد بيئة التطوير الخاصة بك.

خارطة مصدر من ملف يحتوي على تتبّع المكدس:

npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map < stacktrace.txt

خارطة مصدر من مجلد adb logcat:

adb logcat -d | npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map

سيؤدي ذلك إلى تحويل كل اسم دالة مصغَّر مع إزاحة مثل p@1:132161 إلى اسم الملف الفعلي مع دالة AwesomeProject/App.js:54:initializeMap.

ملاحظات حول خارطات المصادر Sourcemaps

  • يمكن إنشاء خارطات مصادر متعددة من خلال عملية البناء، لذلك تأكد من استخدام خارطة مصدر في الموقع الموضّح في الأمثلة.
  • تأكد من أن خارطة المصدر التي تستخدمها تتوافق مع الالتزام الدقيق للتطبيق المعطَّل، فالتغييرات الصغيرة في الشيفرة المصدرية يمكن أن تسبب اختلافات كبيرة في الإزاحات.
  • إذا نجح تنفيذ metro-symbolicate مباشرةً، فتأكد من أن الدخل يأتي من أنبوب pipe أو من إعادة توجيه وليس من طرفية.

مصادر