ndk-stack

ابزار 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 اضافه کنید .