تسمح لك أداة ndk-stack
بترميز عمليات تتبُّع تسلسل استدعاء الدوال البرمجية من
adb logcat
أو
شهر قبر في /data/tombstones/
. يحل محل أي
داخل مكتبة مشتركة مع العنوان
<source-file>:<line-number>
من رمز المصدر
مما يجعل تصحيح الأخطاء أسهل.
على سبيل المثال، يترجم محتوى مثل:
I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' I/DEBUG ( 31): pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<< I/DEBUG ( 31): signal 11 (SIGSEGV), fault addr 0d9f00d8 I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8 I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44 I/DEBUG ( 31): r8 00000000 r9 00000000 10 00000000 fp 00000000 I/DEBUG ( 31): ip 0000959c sp be956cc8 lr 00008403 pc 0000841e cpsr 60000030 I/DEBUG ( 31): #00 pc 0000841e /data/local/ndk-tests/crasher I/DEBUG ( 31): #01 pc 000083fe /data/local/ndk-tests/crasher I/DEBUG ( 31): #02 pc 000083f6 /data/local/ndk-tests/crasher I/DEBUG ( 31): #03 pc 000191ac /system/lib/libc.so I/DEBUG ( 31): #04 pc 000083ea /data/local/ndk-tests/crasher I/DEBUG ( 31): #05 pc 00008458 /data/local/ndk-tests/crasher I/DEBUG ( 31): #06 pc 0000d362 /system/lib/libc.so I/DEBUG ( 31):
أكثر قابلية للقراءة:
********** Crash dump: ********** Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<< signal 11 (SIGSEGV), fault addr 0d9f00d8 Stack frame #00 pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13 Stack frame #01 pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5 Stack frame #02 pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9 Stack frame #03 pc 000191ac /system/lib/libc.so Stack frame #04 pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14 Stack frame #05 pc 00008458 /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19 Stack frame #06 pc 0000d362 /system/lib/libc.so
الاستخدام
لاستخدام ndk-stack
، ستحتاج أولاً إلى دليل يحتوي على
النُسخ التي لم تتم إزالتها من المكتبات المشتركة في تطبيقك في حال استخدام
ndk-build
، يمكن العثور على هذه المكتبات المشتركة التي لم تتم إزالتها في
$PROJECT_PATH/obj/local/<abi>
، حيث <abi>
هو واجهة التطبيق الثنائية (ABI) في جهازك.
هناك طريقتان لاستخدام هذه الأداة. يمكنك إدخال نص Logcat كإدخال مباشر إلى البرنامج. مثلاً:
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a
يمكنك أيضًا استخدام الخيار -dump
لتحديد سجلّ Logcat كملف إدخال. مثلاً:
adb logcat > /tmp/foo.txt $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump foo.txt
عند بدء تحليل ناتج Logcat، تبحث الأداة عن سطر أولي من العلامات النجمية. مثلاً:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
ملاحظة: عند نسخ/لصق آثار الأنشطة، لا تنسَ هذا السطر، أو
لن يعمل ndk-stack
بشكل صحيح.
مزيد من المعلومات
يستخدم Google Play العلامة ndk-stack
لترميز عمليات تتبُّع تسلسل استدعاء الدوال البرمجية للإعلانات الأصلية.
التطبيقات في Google Play Console. للحصول على معلومات حول كيفية تفعيل هذا الخيار
تطبيق في بيئة إنتاج، فتعرَّف على كيفية
تضمين ملف أصلي لتصحيح أخطاء الترميز
لتطبيقك في Google Play Console.