ReactNative/symbolication
ترجمة عناوين Symbolicating تعقّب المكدس
إن رفع تطبيق 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 من خلال إعداد بيئة التطوير الخاصة بك.
من ملف يحتوي على تعقّب المكدس:
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 أو من إعادة توجيه وليس من طرفية.