ابزار 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 دستگاه شما است.
برای ساخت پلاگین Android Gradle (AGP)، کتابخانههای جدا نشده در <project-path>/build/intermediates/cxx/<build-type>/<hash>/obj/<abi>
خواهند بود، جایی که <project-path>
دایرکتوری پروژه AGP است که شامل ماژولی است که میخواهید نمادسازی کنید (به طور پیشفرض این app
است)، <build-type>
نام نوع ساخت CMake یا ndk-build است (مانند RelWithDebInfo
، Release
، Debug
و غیره)، <hash>
دلخواه است و <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 استفاده می کند. برای کسب اطلاعات در مورد نحوه فعال کردن این مورد برای برنامه خود در یک محیط تولید، ببینید چگونه یک فایل نمادهای اشکال زدایی بومی را برای برنامه خود در کنسول Google Play اضافه کنید .