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. haxe 嵌入swf 读取里面的内容

    首先安装 swf 库,运行命令: 命令提示符: haxelib install swf 在project.xml 加上 <!-- 导入swf类库 --> <haxelib name= ...

  2. UVA 11853 Paintball ——(dfs+圆交判定)

    题意:给出一个1000*1000大小的矩阵,里面有若干圆,表示障碍物,现在要找出从左边到右边的一条通路,输出入口和出口的坐标,如果有多答案,输出y值最大的答案. 分析:从与上面相连的圆开始dfs,每次 ...

  3. memcached添加IP白名单,只允许指定服务器调用

    由于memcached默认安装是不用配置密码的(具体的密码配置我也没怎么研究,据说是有的,大家感兴趣去找一找) 然而memcached链接也是非常简单的 linux命令链接使用  Telnet IP地 ...

  4. 页面新宠图片格式WebP

    WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式.图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间.Facebook Ebay等知名网站已经开始测 ...

  5. css预处理器

    Sass.LESS是什么?大家为什么要使用他们?  他们是CSS预处理器.他是CSS上的一种抽象层.他们是一种特殊的语法/语言编译成CSS.  Less是一种动态样式语言. 将CSS赋予了动态语言的特 ...

  6. HDU 1789 Doing Homework again(贪心)

    在我上一篇说到的,就是这个,贪心的做法,对比一下就能发现,另一个的扣分会累加而且最后一定是把所有的作业都做了,而这个扣分是一次性的,所以应该是舍弃扣分小的,所以结构体排序后,往前选择一个损失最小的方案 ...

  7. c# toolstrip控件怎么把左边的几个小点去掉??

    选中你的toolstrip 然后属性属性中有个 GripStyle 设置Hidden

  8. js学习之函数

    1/.js中函数就是对象. 2/以表达式方式定义的函数一般不要函数名以使代码紧凑. 3/js中函数声明的方式会被默认提到外部脚本或最前面,所以在其定义前的代码也可调用. 然而以表达式方式的则不行. 4 ...

  9. JavaFX 2.0+ WebView /WebEngine render web page to an image

    http://stackoverflow.com/questions/7796558/javafx-2-0-webview-webengine-render-web-page-to-an-image ...

  10. STM32开发指南-DMA

    DMA,直接存储器访问.传输数据时,外设通过DMA控制器直接访问内存,不经过cpu直接控制传输数据.不需要像中断处理方式需要保留和恢复现场的过程.通过硬件为内存和I/O设备开辟一条直接传送数据的通道, ...