الفرق بين المراجعتين لصفحة: «ReactNative/symbolication»

من موسوعة حسوب
لا ملخص تعديل
طلا ملخص تعديل
 
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
== ترجمة عناوين Symbolicating تتبّع المكدس ==
<noinclude>{{DISPLAYTITLE:ترجمة عناوين Symbolicating تعقب المكدس في React Native}}</noinclude>
إن ألقى تطبيق React Native اعتراضًا ليس معالَجًا في إصدار البناء، فقد يكون الخرج غامضًا ويصعب قراءته:<syntaxhighlight lang="bash">
إن رفع تطبيق React Native استثناء exception ليس معالَجًا في إصدار البناء، فقد يكون الخرج غامضًا ويصعب قراءته كما يلي:<syntaxhighlight lang="bash">
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: 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: 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:
سطر 7: سطر 7:
07-15 10:58:25.820 18979 18998 E AndroidRuntime: f@1:131854
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
07-15 10:58:25.820 18979 18998 E AndroidRuntime: anonymous@1:131119
</syntaxhighlight>الأقسام كالقسم <code>p@1:132161</code> هي أسماء دوال مصغَّرة وإزاحات شيفرة ثنائية. قد ترغب بدلًا من ذلك في ترجمتها إلى ملف وسطر واسم دالة مثل: <code>AwesomeProject/App.js:54:initializeMap</code>. تُعرف هذه العملية باسم '''symbolication'''. يمكنك ترجمة أسماء الدوال المصغرة والشيفرة الثنائية كالواردة أعلاه عن طريق تمرير <code>metro-symbolicate</code> لخارطة المصدر المُنشَأة وتتبّع المكدس stack trace.<blockquote>تُثبَّت حزمة <code>metro-symbolicate</code> افتراضيًا في قالب مشروع React Native من خلال [[ReactNative/environment setup|إعداد بيئة التطوير الخاصة بك]].</blockquote>خارطة مصدر من ملف يحتوي على تتبّع المكدس:<syntaxhighlight lang="bash">
</syntaxhighlight>الأقسام كالقسم <code>p@1:132161</code> هي أسماء دوال مصغَّرة وإزاحات شيفرة ثنائية، لذلك قد ترغب بدلًا من ذلك في ترجمتها إلى ملف وسطر واسم دالة مثل: <code>AwesomeProject/App.js:54:initializeMap</code>. تُعرف هذه العملية باسم '''symbolication'''، إذ يمكنك ترجمة أسماء الدوال المصغرة والشيفرة الثنائية كالواردة أعلاه عن طريق تمرير حزمة <code>metro-symbolicate</code> وخارطة الشيفرة البرمجية المحوّلة source map المُنشَأة وتعقّب المكدس stack trace.<blockquote>'''ملاحظة:''' تُثبَّت حزمة <code>metro-symbolicate</code> افتراضيًا في قالب مشروع React Native من خلال [[ReactNative/environment setup|إعداد بيئة التطوير الخاصة بك]].</blockquote>تطبيق عملية symbolication من ملف يحتوي على تعقّب المكدس:<syntaxhighlight lang="bash">
npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map < stacktrace.txt
npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map < stacktrace.txt
</syntaxhighlight>خارطة مصدر من مجلد <code>adb logcat</code>:<syntaxhighlight lang="bash">
</syntaxhighlight>تطبيق عملية symbolication من مجلد <code>adb logcat</code>:<syntaxhighlight lang="bash">
adb logcat -d | npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
adb logcat -d | npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
</syntaxhighlight>سيؤدي ذلك إلى تحويل كل اسم دالة مصغَّر مع إزاحة مثل <code>p@1:132161</code> إلى اسم الملف الفعلي مع دالة <code>AwesomeProject/App.js:54:initializeMap</code>.
</syntaxhighlight>سيؤدي ذلك إلى تحويل كل اسم دالة مصغَّر مع إزاحة مثل <code>p@1:132161</code> إلى اسم الملف الفعلي مع دالة <code>AwesomeProject/App.js:54:initializeMap</code>.


=== ملاحظات حول خارطات المصادر Sourcemaps ===
== ملاحظات حول خرائط الشيفرة البرمجية المحولة Sourcemaps ==


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


سطر 22: سطر 22:


* [https://reactnative.dev/docs/symbolication صفحة Symbolicating a stack trace في توثيق React Native الرسمي.]
* [https://reactnative.dev/docs/symbolication صفحة Symbolicating a stack trace في توثيق React Native الرسمي.]
[[تصنيف:ReactNative]]
[[تصنيف:React Native Docs]]

المراجعة الحالية بتاريخ 13:39، 9 أكتوبر 2021

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

مصادر