Android使用ndk-stack获取so奔溃堆栈
利用NDK做开发,因为各种原因的不小心,导致了闪退问题,没有stack的话,很难查到问题的所在。这时候ndk-stack出场了。
先看看如下DUMP信息:
********** Crash dump: **********
Build fingerprint: 'OPPO/A33/A33:5.1.1/LMY47V/1390465867:user/release-keys'
pid: , tid: , name: Thread- >>> com.example.dctool <<<
signal (SIGSEGV), code (SEGV_MAPERR), fault addr 0xdeadbaad
Stack frame # pc 00028f20 /system/lib/libc.so (dlfree+)
Stack frame # pc 0000f3e3 /system/lib/libc.so (free+)
Stack frame # pc 000559e3 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPost(char const*, char const*, int)+): Routine ??
??:
Stack frame # pc 00056d9f /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntUploadInfo()+): Routine ??
??:
Stack frame # pc 00059f3f /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnPingNotify(unisdk::PingRet&)+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::statistics()+): Routine ??
??:
Stack frame # pc 000585ed /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::ping(int, int)+): Routine ??
??:
Stack frame # pc 00054bad /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPingBaidu()+): Routine ??
??:
Stack frame # pc 00059f6f /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnPingNotify(unisdk::PingRet&)+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::statistics()+): Routine ??
??:
Stack frame # pc 000585ed /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::ping(int, int)+): Routine ??
??:
Stack frame # pc 000547c1 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPingQQ()+): Routine ??
??:
Stack frame # pc 00059edf /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnPingNotify(unisdk::PingRet&)+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::statistics()+): Routine ??
??:
Stack frame # pc 000585ed /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc 000585dd /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::ntping::ping(int, int)+): Routine ??
??:
Stack frame # pc /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPing163()+): Routine ??
??:
Stack frame # pc 0005aa31 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+): Routine ??
??:
Stack frame # pc 000552a3 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntHead(char const*, int)+): Routine ??
??:
Stack frame # pc 0005aab1 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+): Routine ??
??:
Stack frame # pc 000552a3 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntHead(char const*, int)+): Routine ??
??:
Stack frame # pc 0005a9db /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+): Routine ??
??:
Stack frame # pc 000552a3 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntHead(char const*, int)+): Routine ??
??:
Stack frame # pc 0005ac51 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+): Routine ??
??:
Stack frame # pc 000556e9 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntGet(char const*, int, int)+): Routine ??
??:
Stack frame # pc 0005ada3 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+): Routine ??
??:
Stack frame # pc 000556e9 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntGet(char const*, int, int)+): Routine ??
??:
Stack frame # pc 0005b6e7 /data/app/com.example.dctool-/lib/arm/libunisdkdctool.so (unisdk::nttool::ntStartExecute(void*)+): Routine ??
??:
Stack frame # pc 000134a3 /system/lib/libc.so (__pthread_start(void*)+)
Stack frame # pc 000114a7 /system/lib/libc.so (__start_thread+)
上面的信息是ndk-stack解析出来的信息,使用命令如下:
adb logcat | $NDK_HOME/ndk-stack -sym $PROJECT/libs/armeabi
其中,$PROJECT/libs/armeabi是so的路径。
解析出来的stack顶部地址,便是引发crash的代码行,可以利用addr2line做进一步的分析,查出引发crash的API,使用如下:
arm-linux-androideabi-addr2line -a 000556ff -e libunisdkdctool.so -f -C
打完收工!
Android使用ndk-stack获取so奔溃堆栈的更多相关文章
- android app记录执行日志 捕获奔溃异常 ,存储日志到文件
app在执行过程中.为了后期的维护升级,记录日志是一个很好的方法. 为了读取到app执行时的日志,一般的作法是单独开一个线程,在app执行的启动线程.然后app退出时停掉线程. 然而我们更好的方法是开 ...
- address2line 定位 Android c++奔溃位置
Android调用c++出现奔溃,崩溃信息为如下: 10-11 15:15:13.541 D/AudioMTKStreamOut( 139): write(), buffer = 0x42bd9390 ...
- android 抓取native层奔溃
使用android的breakpad工具 使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具 我们使用这两个工具来解析奔溃的位置.这里我们可以下载已经编译好的工具 下载地 ...
- Android 如何避免运行时奔溃
奔溃问题 android运行的时候难免会有一些空指针(NullPointerException)或者下标越界(IndexOutOfBoundsException),用户使用的过程操作某一个按钮的时候, ...
- Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候 出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了调用java函数就 ...
- iOS全埋点解决方案-采集奔溃
前言 采集应用程序奔溃信息,主要分为以下两种场景: NSException 异常 Unix 信号异常 一.NSException 异常 NSException 异常是 Objectiv ...
- Android Studio NDK初探
Android Studio中实现NDK开发较之前Eclipse+Cygwin,方便了很多. 本文以最简单的从C程序中获取字符串,并显示到MainActivity的TextView上为例进行NDK开发 ...
- Android Studio NDK 学习之接受Java传入的字符串
本博客是基于Android Studio 1.3 preview版本,且默认你已经安装了Android SDK, Android NDK. 用Android Studio新建一个工程叫Prompt,其 ...
- Android Studio NDK 学习之接受Java传入的Int数组
本博客是基于Android Studio 1.3 preview版本,且默认你已经安装了Android SDK, Android NDK. 用Android Studio新建一个工程叫AndroidJ ...
随机推荐
- ffmpeg 屏幕录制 so easy....
linux Linux下使用FFmpeg进行屏幕录制相对比较方便,可以使用x11grab,使用如下的命令: ffmpeg -f x11grab -s 1600x900 -r 50 -vcodec li ...
- [IOS]swift自定义uicollectionviewcell
刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollect ...
- GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现. Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的G ...
- HDU5769 Substring(后缀数组)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 #include <iostream> #include <stdio.h> ...
- IE8浏览器不能识别CSS伪类的解决办法。
1. 方法一:开头加上这两句 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- POMDP
本文转自:http://www.pomdp.org/ 一.Background on POMDPs We assume that the reader is familiar with the val ...
- 树莓派+移动硬盘搭建NAS服务器
由于树莓派的USB接口不足以给移动硬盘供电,因此需要另外给移动硬盘提供电源. 显示当前已有的存储设备 # fdisk -l Disk /dev/mmcblk0: 7876 MB, 7876902912 ...
- Servlet异步上传文件
这里需要用到插件ajaxfileupload.js,jar包:commons-fileupload-1.3.2.jar,commons-io-2.5.jar 注意红色部分的字!!!! 1.创建一个we ...
- 怎样解决Myeclipse中运行jsp乱码问题,亲测有效(虽然是个小问题但是为了大家不被网络上的一些乱七八糟的回答坑)不是改什么windows-propories-...............
方法: 在jsp页面中pageEncoding属性值改为UTF-8,指定用UTF-8编码.gbk或者gb18030编码都无效.不是改什么windows-propories-.............. ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...