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  0000002515 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  0000000817 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21dc  61e2a79418 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21e0  61e2a79419 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21e4  612aa388  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so20 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21e8  61e2a7d421 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21ec  60eb781b  /data/data/com.linekong.dgr.langang/files/so_path/libgame.so22 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21f0  61e2a79423 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc21f4  0000000824 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  df00277727 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2204  e3a070ad28 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2208  61e2a76829 10-11 15:15:13.576 I/DEBUG   ( 9136):     #00  becc220c  4000000130 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2210  61e2a7a831 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2214  5f5501a032 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2218  61e2a76833 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  5f5501a035 10-11 15:15:13.576 I/DEBUG   ( 9136):          becc2224  61e2a7d436 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> 解析。

更多相关文章

  1. android中如何获取经纬度?
  2. 不错的学android的博客
  3. Android硬件抽象层加调试信息
  4. batT脚本如何自动执行 adb shell 以后的命令(android抓包)
  5. Android计时器Chronometer小例子
  6. Error:Execution failed for task ':app:packageDebug'. > !zip.
  7. Android(安卓)CTS包下载地址
  8. 读取SIM卡信息
  9. Android_经典控件

随机推荐

  1. android 如何彻底关闭应用
  2. Android 数据库SQLite的使用简单Demo
  3. Android桌面小部件AppWidget(1)
  4. Android培训班(3)
  5. Android的启动过程分析(从进程和Framewor
  6. Android 中自定义属性(attr.xml,TypedArr
  7. Android中LocationManager的简单使用,获
  8. android looper介绍
  9. Android 中关于 【Cursor】 类的介绍
  10. android4.0 添加一个新的android 键值(转