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>
आपके डिवाइस का एबीआई है.
इस टूल का इस्तेमाल करने के दो तरीके हैं. आपके पास Logcat टेक्स्ट को प्रोग्राम में, डायरेक्ट इनपुट के तौर पर फ़ीड करने का विकल्प होता है. उदाहरण के लिए:
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a
लॉगकैट को इनपुट फ़ाइल के तौर पर बताने के लिए, -dump
विकल्प का इस्तेमाल भी किया जा सकता है. उदाहरण के लिए:
adb logcat > /tmp/foo.txt $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump foo.txt
जब यह लॉगकैट आउटपुट को पार्स करना शुरू करता है, तो यह टूल तारे के निशान की शुरुआती लाइन खोजता है. उदाहरण के लिए:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
ध्यान दें: ट्रेस को कॉपी/पेस्ट करते समय, इस लाइन को न भूलें या
ndk-stack
ठीक से काम नहीं करेगा.
ज़्यादा जानकारी
Google Play, नेटिव विज्ञापनों में स्टैक ट्रेस दिखाने के लिए ndk-stack
का इस्तेमाल करता है
ऐप्लिकेशन डाउनलोड करने हैं. अपने
में जानकारी जोड़ी है, तो जानें कि
नेटिव डीबग सिंबल वाली फ़ाइल शामिल करना
में साइन इन करने की सुविधा देता है.