zoukankan      html  css  js  c++  java
  • address2line 定位 Android c++奔溃位置

       Android调用c++出现奔溃,崩溃信息为如下:

     1 10-11 15:15:13.541 D/AudioMTKStreamOut(  139): write(), buffer = 0x42bd9390 bytes = 8192 mLatency = 92
     2 10-11 15:15:13.562 I/PowerManagerService(  513): setBrightness mButtonLight, screenBrightness=245
     3 10-11 15:15:13.575 I/DEBUG   ( 9136):     r0 40000001  r1 61e2a7a8  r2 becc2224  r3 becc2220
     4 10-11 15:15:13.575 I/DEBUG   ( 9136):     r4 40000001  r5 61e2a7a8  r6 5f5501a0  r7 61e2a768
     5 10-11 15:15:13.575 I/DEBUG   ( 9136):     r8 becc25bc  r9 41b76d00  sl 41b70020  fp becc25d4
     6 10-11 15:15:13.575 I/DEBUG   ( 9136):     ip 00000000  sp becc220c  lr 60e6abd7  pc 610a672e  cpsr 00000030
     7 10-11 15:15:13.575 I/DEBUG   ( 9136):
     8 10-11 15:15:13.575 I/DEBUG   ( 9136): backtrace:
     9 10-11 15:15:13.575 I/DEBUG   ( 9136):     #00  pc 006d372e  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so (cocos2d::CCDictionary::setObject(cocos2d::CCObject*, std::string const&)+1)
    10 10-11 15:15:13.575 I/DEBUG   ( 9136):     #01  pc 000203c4  [stack]
    11 10-11 15:15:13.575 I/DEBUG   ( 9136):
    12 10-11 15:15:13.575 I/DEBUG   ( 9136): stack:
    13 10-11 15:15:13.575 I/DEBUG   ( 9136):          becc21cc  40049b30  /system/lib/libc.so (malloc+20)
    14 10-11 15:15:13.575 I/DEBUG   ( 9136):          becc21d0  00000025
    15 10-11 15:15:13.575 I/DEBUG   ( 9136):          becc21d4  612bfd8c  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so (operator new(unsigned int)+24)
    16 10-11 15:15:13.575 I/DEBUG   ( 9136):          becc21d8  00000008
    17 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21dc  61e2a794
    18 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21e0  61e2a794
    19 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21e4  612aa388  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so
    20 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21e8  61e2a7d4
    21 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21ec  60eb781b  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so
    22 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21f0  61e2a794
    23 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21f4  00000008
    24 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21f8  becc2220  [stack]
    25 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21fc  becc2224  [stack]
    26 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2200  df002777
    27 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2204  e3a070ad
    28 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2208  61e2a768
    29 10-11 15:15:13.576 I/DEBUG   ( 9136):     #00  becc220c  40000001
    30 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2210  61e2a7a8
    31 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2214  5f5501a0
    32 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2218  61e2a768
    33 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc221c  60e6abd7  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so (CCJsonData::setStringValue(std::string, std::string)+58)
    34 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2220  5f5501a0
    35 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2224  61e2a7d4
    36 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2228  becc231c  [stack]
    37 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc222c  614ba9f0  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so

    这时候我们怎么查看奔溃点呢,可以使用address2line。

    我的是mac版本的NDK_r8e,它的位置在

    $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86_64/bin

    你可以把这个路径添加到环境变量中,然后在工程的根目录下执行如下命令了。

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

    这边的address是崩溃的起始点,#00  pc开头的后面的那个地址。像我们可以看第9行的崩溃信息得到地址006d372e。

    arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so 006d372e

    可以看到最后等到下面这样的信息

    ./arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libgame.so 006d372e

    cocos2d::CCDictionary::setObject(cocos2d::CCObject*, std::string const&)

    /Users/chuanwei/project/battlegirl/project/BattleGirl/proj.android/game/../../../cocos2dx/cocoa/CCDictionary.cpp:213

     最后找到问题了。

     

    附加:这边提供另外一个方式查找问题,利用google提供的脚本,脚本地址

    http://code.google.com/p/android-ndk-stacktrace-analyzer/

    使用 adb logcat -d > logfile 导出 crash 的log,然后用arm-linux-androideabi-objdump,跟arm-linux-androideabi-addr2line位于同一个目录下,

    把so或exe转换成汇编代码,如:arm-linux-androideabi-addr2line -S mylib.so > mylib.asm,

    使用脚本 python parse_stack.py <asm-file> <logcat-file> 解析。

  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/chuanwei-zhang/p/4021817.html
Copyright © 2011-2022 走看看