ndk-stack 使用(分析native代码stack)
简介:
ndk r6 版本之后开始提供该功能。
作用:
ndk-stack可以把不认识的内存地址信息转换成可读的信息。
比如,把下列内容
I/DEBUG ( ): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( ): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'
I/DEBUG ( ): pid: , tid: %gt;%gt;%gt; /data/local/ndk-tests/crasher <<<
I/DEBUG ( ): signal (SIGSEGV), fault addr 0d9f00d8
I/DEBUG ( ): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8
I/DEBUG ( ): r4 r5 0000a008 r6 0000af88 r7 00013c44
I/DEBUG ( ): r8 r9 fp
I/DEBUG ( ): ip 0000959c sp be956cc8 lr pc 0000841e cpsr
I/DEBUG ( ): # pc 0000841e /data/local/ndk-tests/crasher
I/DEBUG ( ): # pc 000083fe /data/local/ndk-tests/crasher
I/DEBUG ( ): # pc 000083f6 /data/local/ndk-tests/crasher
I/DEBUG ( ): # pc 000191ac /system/lib/libc.so
I/DEBUG ( ): # pc 000083ea /data/local/ndk-tests/crasher
I/DEBUG ( ): # pc /data/local/ndk-tests/crasher
I/DEBUG ( ): # pc 0000d362 /system/lib/libc.so
I/DEBUG ( ):
转换成可读信息后:
********** Crash dump: **********
Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'
pid: , tid: >>> /data/local/ndk-tests/crasher <<<
signal (SIGSEGV), fault addr 0d9f00d8
Stack frame # pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:
Stack frame # pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:
Stack frame # pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:
Stack frame # pc 000191ac /system/lib/libc.so
Stack frame # pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:
Stack frame # pc /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:
Stack frame # pc 0000d362 /system/lib/libc.so
使用方法:
前提: 你的代码必须是使用ndk build打包出来的。这样地址信息就会是
$PROJECT_PATH/obj/local/<abi>
其中 <abi> 是根据你的手机的ABI来的。(比如:’armeabi‘就是默认值)
打开你的控制台,输入($NDK是你的环境变量,指向NDK目录):
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
大工完成。
ndk-stack 使用(分析native代码stack)的更多相关文章
- 解密native代码的内存使用
前言 无论是从资源使用的角度,还是从发现内存泄漏问题的角度来看,在性能测试或者系统的稳定性测试中,内存的使用情况是一个很重要的监控点.为保证项目的质量前移,输入法内核测试小组的同学分配到了一个新的任务 ...
- 013 - 关于GC root: Native Stack | MAT分析
Question: I have some third library code that I run and after some time I run into OutOfMemoryEr ...
- Android Native 代码NDK开发学习笔记
引用:http://www.kunli.info/2011/08/21/android-native-code-study-note/ JNI,全称Java Native Interface,是用于让 ...
- Ngen生成Native代码实战及优缺点分析
先科普一下,.Net是一个用于Windows的托管代码模型,用于高效构建具有视觉上引人注目的用户体验的应用程序.但这个模型生成的代码并非可执行代码,而是由.Net公共语言运行库环境执行的IL代码.所以 ...
- 集中式日志分析平台 - ELK Stack - 安全解决方案 X-Pack
大数据之心 关注 0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7喜欢 9 简介 X-Pack 已经作为 Elastic 公司单独的产品线,前身是 Shield, ...
- Android 平台 Native 代码的崩溃捕获机制及实现
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w 一.背景 ...
- 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
- 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码
洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
随机推荐
- Git Windows客户端保存用户名与密码
1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图: 2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的文件. 3. 用记事本打开_n ...
- Xcode8 上传完.ipa包 官网超过2天还没反应
出现这个问题一般邮件有提示,我这里说一下,我之前都上传没有问题,就更新完Xcode8,就不行. 这个问题其实是因为权限没有写完 这样就可以了.
- 个人项目(JUnit单元测试)
---恢复内容开始--- 一. 题目简介 这次的单元测试我选择作了一个基本运算的程序,该程序实现了加,减,乘,除,平方,倒数的运算,该程序进行测试比较的简单,对于初步接触JUn ...
- apache2.4设置外网访问问题
Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from all 全部改成 Allow from all 实现外网访问 ...
- 使用sublime遇到的问题汇总
问题一:用GBK编码的文件用Sublime打开出现中文乱码的解决办法: 通过ctrl+shift+p--package control install安装插件"ConvertToUTF8&q ...
- 笔记 线程(threads)
线程:CPU使用的基本单元(线程ID.程序计数器.寄存器集合.栈). 多线程:一个进程有多个线程 多线程的优点: 增加响应度:当一个交互程序部分阻塞,该程序能继续执行 一个应用程序在同一地址空间有多个 ...
- [THINKING IN JAVA]访问权限控制
6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...
- mysql之高可靠
6.mysql主-从备份 主-主备份,首先AB机要保持数据一致,即先手工备份A机数据,然后在B机上恢复,之后就很简单了,只需要在B机上创建一个同步账号,并在A机上输入B机的那些参数然后启动slave ...
- CentOS MySQL 配置
问题: MySQL安装后root用户无法连接,提示 ERROR 1045 (28000): Access denied for user ’root’@’localhost’ (using passw ...
- RAID简介
RAID(独立磁盘冗余阵列)可以提供较普通磁盘更高的速度,安全性,所以服务器在安装时会选择创建RAID.RAID的创建有两种方式:软RAID(通过操作系统软件来实现)和硬raid(使用硬件整列卡) r ...