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,
使用脚本pythonparse_stack.py
原文链接: https://www.cnblogs.com/chuanwei-zhang/p/4021817.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/149063
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!