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条羊肠小道,每条连接两座 ...
随机推荐
- webStorm 多个项目并存
点击file ->settings ->Directories 然后右侧有个Add Content Root 添加某个Root即可看见该root下的所有项目
- Hive中的排序和分组(对map和reduce的影响,值得一看!)
order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规 模较大时,需要较长的计算时间. set ...
- 汇编语言进阶和Makefile进阶---第二天
摘要: 原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 首先加载启动代码: ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序装载地 ...
- JS 获取地址栏三级域名
<script type="text/javascript"> function Char(str) { var uchars = {}; str.replace(/\ ...
- Java Concurrent之 AbstractQueuedSynchronizer
ReentrantLock/CountDownLatch/Semaphore/FutureTask/ThreadPoolExecutor的源码中都会包含一个静态的内部类Sync,它继承了Abstrac ...
- chrome/ie中图片底部多出几像素问题
如果给图片的父元素设置背景色,则图片的底部就会多出几像素,chrome/IE/FF中均是如此,如下图: 代码如下,就是简单的div中放张图片: <!doctype html> <ht ...
- asp.net 自定义控件 嵌入资源文件 备忘
要想在自定义用户控件中嵌入资源,从以下几个步骤入手: 1.在AssemblyInfo.cs中注册资源,文件夹层级用点隔开.例如: [assembly: System.Web.UI.WebResourc ...
- asp.net mvc js 获取model值。
cshtml页面部分代码: div class="col-sub"> @using (Html.BeginForm("SaveTTMallConf ...
- .net解决程序集版本冲突的方法
以log4net为例,分为两种情况 1.不同version,相同publicKeyToken 在bin里放较新版本的dll 并在web|app.config的<configuration> ...
- Validation failed for one or more entities.
验证失败后用DbEntityValidationException 查找出错的字段 try { // Your code... // Could also be before try if you k ...