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. 快学Scala-第九章 文件和正则表达式

    知识点: 1.读取文件中的所有行,可以调用scala.io.Source对象的getLines方法: import scala.io.Source val source = Source.from(& ...

  2. css05 字体以及行间距

    <head><meta charset="utf-8"><title>无标题文档</title><style>#box{ ...

  3. #ifndef 和 #endif

    文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了, ...

  4. Java 8新特性探究(九)跟OOM:Permgen说再见吧

    PermGen space简单介绍 元空间(MetaSpace)一种新的内存空间诞生 PermGen 空间的状况 Metaspace 内存分配模型 Metaspace 容量 Metaspace 垃圾回 ...

  5. AndroidStudio使用注意事项

    今天在引入GitHUb上的开源框架时,写好依赖后编译时,报以下错误: Error:Execution failed for task ':app:processDebugResources'.> ...

  6. JavaBean--简介及基本使用

    JavaBean本身就是一个类,属于java的面向对象编程 JavaBean是使用java语言开发的一个可重用的组建,在JSP开发中如果要应用JSP提供的JavaBean标签来操作简单的类的话,需要满 ...

  7. C++读取excel特定行列中的数据

    可以通过COM API调用才是正解,不过需要编写COM接口类,Excel对象库的接口太多了……不过可以用工具自动生成. 我最近也在用VC操作Excel,在VC中可以这样做,在任何一个cpp文件中加入下 ...

  8. 我也谈javascript正则匹配

    一.javascript 正则全局匹配 g 慎用test()方法 来个例子: var a = /^[a-z]+/gi; a.test('bb123'); //true a.lastIndex ; // ...

  9. cakephp , the subquery (2)

    Cakephp 框架帮我们做了很多的工作,的确省了我们很多工作,提高了效率. 但是,碰到一些比较复杂的查询时,还是有些问题,官方的cookbook api 有说明一些详细的用法,但感觉还是不太够,有些 ...

  10. ecos的model

    表->dbschema->model 虚拟化model机制 在dbschema存在model不存在的情况下 很多mvc结构都这么来 model命名规则 {$app_name}_mdl_{$ ...