ترجمة عناوين Symbolicating تعقب المكدس في React Native

من موسوعة حسوب

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

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 وخارطة الشيفرة البرمجية المحوّلة source map المُنشَأة وتعقّب المكدس stack trace.

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

تطبيق عملية symbolication من ملف يحتوي على تعقّب المكدس:

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

تطبيق عملية symbolication من مجلد 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 أو من إعادة توجيه وليس من طرفية.

مصادر