android एंड्रॉइड में addr2line का उपयोग कैसे करें




android-ndk shared-libraries (2)

अब यह करने का एक आसान तरीका है (ndk-r7)। Ndk-stack कमांड देखें। दस्तावेज़ you_android_ndk_path / docs / NDK-STACK.html में हैं

मैं अपने ऐप से फंस गया हूं, क्योंकि मैं डीबग करने में असमर्थ हूं क्योंकि यह एक बहुप्रचारित है और त्रुटि SIGSEGV के साथ दुर्घटनाग्रस्त है। मुझे LogCat से बहुत सारी जानकारी मिलती है, जो मुझे मेरी मूल पुस्तकालय में पते देती है। यह उपयोगी होगा अगर मैं इन पते को अपने कोड में परिवर्तित कर सकता हूं।

क्या किसी को पता है कि addr2line का उपयोग कैसे करें, जो एंड्रॉइड-एनडीके के साथ प्रदान किया जाता है?


मान लें कि लॉगकैट आपको निम्न क्रैश लॉग दिखाता है (यह मेरी परियोजनाओं में से एक है):

I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (   31): Build fingerprint: 'generic/sdk/generic:2.3/GRH55/79397:eng/test-keys'
I/DEBUG   (   31): pid: 378, tid: 386  >>> com.example.gltest <<<
I/DEBUG   (   31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG   (   31):  r0 001dbdc0  r1 00000001  r2 00000000  r3 00000000
I/DEBUG   (   31):  r4 00000000  r5 40a40000  r6 4051a480  r7 42ddbee8
I/DEBUG   (   31):  r8 43661b24  r9 42ddbed0  10 42ddbebc  fp 41e462d8
I/DEBUG   (   31):  ip 00000001  sp 436619d0  lr 83a12f5d  pc 8383deb4  cpsr 20000010
I/DEBUG   (   31):          #00  pc 0003deb4  /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG   (   31):          #01  pc 00039b76  /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG   (   31):          #02  pc 00017d34  /system/lib/libdvm.so

अंतिम 3 लाइनों को देखो; यह तुम्हारा कॉलस्टैक है। 'पीसी' प्रोग्राम काउंटर है, और स्टैक फ्रेम # 00 के लिए पीसी आपको वह पता देता है जहां दुर्घटना हुई। यह addr2line को पास करने की संख्या है।

मैं एनडीके आर 5 का उपयोग कर रहा हूं, इसलिए मैं जिस निष्पादन योग्य का उपयोग कर रहा हूं वह $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin ; सुनिश्चित करें कि आपके $PATH । उपयोग करने के लिए आदेश की तरह दिखता है

arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so <address>

या, ऊपर के मामले के लिए:

arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libnativemaprender.so 0003deb4

जो आपको दुर्घटना का स्थान देता है।

ध्यान दें:

  • सीसी + ध्वज सी ++ कोड को विचलित करना है
  • ओएसजे / स्थानीय / आर्मेबी के तहत .so फ़ाइल का उपयोग करें, क्योंकि यह गैर-पट्टी वाला संस्करण है

साथ ही, 2.3 एवीडी के साथ एनडीके आर 5 का उपयोग करते समय, मल्टीथ्रेड कोड को डीबग करना वास्तव में संभव है।





addr2line