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

 10-11 15:15:13.541 D/AudioMTKStreamOut(  139): write(), buffer = 0x42bd9390 bytes = 8192 mLatency = 92
10-11 15:15:13.562 I/PowerManagerService( 513): setBrightness mButtonLight, screenBrightness=245
10-11 15:15:13.575 I/DEBUG ( 9136): r0 40000001 r1 61e2a7a8 r2 becc2224 r3 becc2220
10-11 15:15:13.575 I/DEBUG ( 9136): r4 40000001 r5 61e2a7a8 r6 5f5501a0 r7 61e2a768
10-11 15:15:13.575 I/DEBUG ( 9136): r8 becc25bc r9 41b76d00 sl 41b70020 fp becc25d4
10-11 15:15:13.575 I/DEBUG ( 9136): ip 00000000 sp becc220c lr 60e6abd7 pc 610a672e cpsr 00000030
10-11 15:15:13.575 I/DEBUG ( 9136):
10-11 15:15:13.575 I/DEBUG ( 9136): backtrace:
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-11 15:15:13.575 I/DEBUG ( 9136): #01 pc 000203c4 [stack]
10-11 15:15:13.575 I/DEBUG ( 9136):
10-11 15:15:13.575 I/DEBUG ( 9136): stack:
10-11 15:15:13.575 I/DEBUG ( 9136): becc21cc 40049b30 /system/lib/libc.so (malloc+20)
10-11 15:15:13.575 I/DEBUG ( 9136): becc21d0 00000025
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)
10-11 15:15:13.575 I/DEBUG ( 9136): becc21d8 00000008
10-11 15:15:13.576 I/DEBUG ( 9136): becc21dc 61e2a794
10-11 15:15:13.576 I/DEBUG ( 9136): becc21e0 61e2a794
10-11 15:15:13.576 I/DEBUG ( 9136): becc21e4 612aa388 /data/data/com.linekong.dgr.langang/files/so_path/libgame.so
10-11 15:15:13.576 I/DEBUG ( 9136): becc21e8 61e2a7d4
10-11 15:15:13.576 I/DEBUG ( 9136): becc21ec 60eb781b /data/data/com.linekong.dgr.langang/files/so_path/libgame.so
10-11 15:15:13.576 I/DEBUG ( 9136): becc21f0 61e2a794
10-11 15:15:13.576 I/DEBUG ( 9136): becc21f4 00000008
10-11 15:15:13.576 I/DEBUG ( 9136): becc21f8 becc2220 [stack]
10-11 15:15:13.576 I/DEBUG ( 9136): becc21fc becc2224 [stack]
10-11 15:15:13.576 I/DEBUG ( 9136): becc2200 df002777
10-11 15:15:13.576 I/DEBUG ( 9136): becc2204 e3a070ad
10-11 15:15:13.576 I/DEBUG ( 9136): becc2208 61e2a768
10-11 15:15:13.576 I/DEBUG ( 9136): #00 becc220c 40000001
10-11 15:15:13.576 I/DEBUG ( 9136): becc2210 61e2a7a8
10-11 15:15:13.576 I/DEBUG ( 9136): becc2214 5f5501a0
10-11 15:15:13.576 I/DEBUG ( 9136): becc2218 61e2a768
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)
10-11 15:15:13.576 I/DEBUG ( 9136): becc2220 5f5501a0
10-11 15:15:13.576 I/DEBUG ( 9136): becc2224 61e2a7d4
10-11 15:15:13.576 I/DEBUG ( 9136): becc2228 becc231c [stack]
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> 解析。

address2line 定位 Android c++奔溃位置的更多相关文章

  1. android 抓取native层奔溃

    使用android的breakpad工具 使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具 我们使用这两个工具来解析奔溃的位置.这里我们可以下载已经编译好的工具 下载地 ...

  2. Android 如何避免运行时奔溃

    奔溃问题 android运行的时候难免会有一些空指针(NullPointerException)或者下标越界(IndexOutOfBoundsException),用户使用的过程操作某一个按钮的时候, ...

  3. Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题

    最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候 出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了调用java函数就 ...

  4. android app记录执行日志 捕获奔溃异常 ,存储日志到文件

    app在执行过程中.为了后期的维护升级,记录日志是一个很好的方法. 为了读取到app执行时的日志,一般的作法是单独开一个线程,在app执行的启动线程.然后app退出时停掉线程. 然而我们更好的方法是开 ...

  5. 查找和定位Android应用的按钮点击事件的代码位置基于Xposed Hook实现

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956455 在进行Android程序的逆向分析的时候,经常需要通过Androi ...

  6. MySQL · 引擎特性 · InnoDB奔溃恢复

    前言 数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的奔溃恢复机制来保证.本 ...

  7. 优秀开源项目之四:CrashRptProbe,查询程序奔溃的利器

    1.背景: 在开发人员进行项目开发和调试代码时,有一个非常困扰的问题,就是程序在调试运行过程中会莫名其妙地异常退出.由于导致异常退出的问题非常多,因此在面对这种无任何提示的异常退出时,开发人员会非常无 ...

  8. paip.超实用 360浏览器最近频繁奔溃解决流程.

    paip.超实用 360浏览器最近频繁奔溃解决流程. 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.n ...

  9. Android中获取当前位置的使用步骤

    在Android中得到当前位置的步骤 1.在AndroidManifest.xml中声明权限 android.permission.ACCESS_FINE_LOCATION(或者android.per ...

随机推荐

  1. Android中ViewPager如何设置不能通过屏幕左右滑动来切换页面

    //很多时候,我想禁止用户通过屏幕的左右滑动来切换界面!如何实现! //创建一个类继承viewpager,实现 onTouchEvent   和   onInterceptTouchEvent方法,都 ...

  2. startActivityForResult与onActivityResult

    androidActivity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCo ...

  3. 一个设置 material design icon的插件工具

    一个设置 material design icon的插件工具 github地址:https://github.com/konifar/android-material-design-icon-gene ...

  4. java项目中使用guava的工具包的心得

    原文:http://www.   zuidaima.com/blog/3182745969511424.htm 以前只是听过这个工具包,但是真正用的话还是在D75需求中.我要实现把前台传入的list集 ...

  5. linux服务器性能状态查看

    vmstat结果内容的解释 Vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu---- ...

  6. java开发第一天

    今天是项目开始的时间,整体来说还是算顺利的.提前分好组,然后是听课时可以有人帮忙占座位的,感觉上是挺好的. 项目开发的难度看了看,由于有了第一次MFC开发的经验,所以这次听课感觉非常的有目标性,而且总 ...

  7. 【转】Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题

    .htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...

  8. C#入门经典第九章定义类-1

    1.C#中使用class关键字来定义类 class MyClass { //代码部分 } 定义了类之后,就可以在项目中能访问该定义的其他位置对该类进行实例化.默认情况下,类的声明是内部的,即只有当前项 ...

  9. List转换成DataSet实现代码

    public DataSet ConvertToDataSet<T>(IList<T> list) { if (list == null || list.Count <= ...

  10. 基于Redis的在线用户列表解决方案

    前言: 由于项目需求,需要在集群环境下实现在线用户列表的功能,并依靠在线列表实现用户单一登陆(同一账户只能一处登陆)功能: 在单机环境下,在线列表的实现方案可以采用SessionListener来完成 ...