ndk-stack 使用(分析native代码stack)

简介:

  ndk r6 版本之后开始提供该功能。

作用:

  ndk-stack可以把不认识的内存地址信息转换成可读的信息。

比如,把下列内容

I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
      I/DEBUG   (   31): Build fingerprint: ‘generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys‘
      I/DEBUG   (   31): pid: 351, tid: 351  %gt;%gt;%gt; /data/local/ndk-tests/crasher <<<
      I/DEBUG   (   31): signal 11 (SIGSEGV), fault addr 0d9f00d8
      I/DEBUG   (   31):  r0 0000af88  r1 0000a008  r2 baadf00d  r3 0d9f00d8
      I/DEBUG   (   31):  r4 00000004  r5 0000a008  r6 0000af88  r7 00013c44
      I/DEBUG   (   31):  r8 00000000  r9 00000000  10 00000000  fp 00000000
      I/DEBUG   (   31):  ip 0000959c  sp be956cc8  lr 00008403  pc 0000841e  cpsr 60000030
      I/DEBUG   (   31):          #00  pc 0000841e  /data/local/ndk-tests/crasher
      I/DEBUG   (   31):          #01  pc 000083fe  /data/local/ndk-tests/crasher
      I/DEBUG   (   31):          #02  pc 000083f6  /data/local/ndk-tests/crasher
      I/DEBUG   (   31):          #03  pc 000191ac  /system/lib/libc.so
      I/DEBUG   (   31):          #04  pc 000083ea  /data/local/ndk-tests/crasher
      I/DEBUG   (   31):          #05  pc 00008458  /data/local/ndk-tests/crasher
      I/DEBUG   (   31):          #06  pc 0000d362  /system/lib/libc.so
      I/DEBUG   (   31):

转换成可读信息后:

********** Crash dump: **********
      Build fingerprint: ‘generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys‘
      pid: 351, tid: 351  >>> /data/local/ndk-tests/crasher <<<
      signal 11 (SIGSEGV), fault addr 0d9f00d8
      Stack frame #00  pc 0000841e  /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13
      Stack frame #01  pc 000083fe  /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5
      Stack frame #02  pc 000083f6  /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9
      Stack frame #03  pc 000191ac  /system/lib/libc.so
      Stack frame #04  pc 000083ea  /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14
      Stack frame #05  pc 00008458  /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19
      Stack frame #06  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

大工完成。

时间: 2024-08-28 01:52:57

ndk-stack 使用(分析native代码stack)的相关文章

解密native代码的内存使用

前言 无论是从资源使用的角度,还是从发现内存泄漏问题的角度来看,在性能测试或者系统的稳定性测试中,内存的使用情况是一个很重要的监控点.为保证项目的质量前移,输入法内核测试小组的同学分配到了一个新的任务,就是在andriod平台上监测输入法内核 native 代码的内存使用情况. 为了完成这个任务,我们先将任务拆解成重要的几步: 1. 了解 andriod 平台的程序与内存 2. 了解 native代码在andriod平台上是如何进行内存分配的 3.  根据2步骤,方法调研,监测native代码内

013 - 关于GC root: Native Stack | MAT分析

Question: I have some third library code that I run and after some time I run into OutOfMemoryError. So I fired up the Eclipse MAT and analyzed the memory. Now it seems the memory can't be disposed because there is an object that is a shown as GC roo

分析ROS Navigation Stack的原因

机器人导航是机器人所有其他功能的基础,手上现有的机器人导航框架已经基本完善,想要再进行性能以及效果上的提高需要很大的改动,因此参考ROS Navigation Stack,进行其代码结构以及思路的阅读,帮自己理清自己项目改进思路,经过几天的分析以及阅读,已经基本明确,接下来几天准备新导航代码的编写.

针对main函数的运行时stack的分析

针对main函数的运行时stack的分析 这里需要特殊说明的是运行环境是64-bits的Ubuntu.编译器是gcc 测试用代码: int main(int argc,char* argv[]) { int array[10]; array[0] = 10; array[9] = 9; return 0; } 利用GDB调试这段代码.我们来观察分析main函数的栈 分析&argc 和&argv可以知道当前main函数栈的使用情况 64bits 的机器.指针长度是64bits,即8byte.

Ngen生成Native代码实战及优缺点分析

先科普一下,.Net是一个用于Windows的托管代码模型,用于高效构建具有视觉上引人注目的用户体验的应用程序.但这个模型生成的代码并非可执行代码,而是由.Net公共语言运行库环境执行的IL代码.所以,每次执行代码时,都会由.Net将IL代码翻译为机器代码.所以,效率上自然会受到一定影响.对此,微软在.Net中附带一个将IL代码转换为Native代码的工具Ngen.exe.它可以创建一份程序集文件至类似于C:\WINDOWS\assembly\NativeImages_v4.0.30319_32

集中式日志分析平台 - ELK Stack - 安全解决方案 X-Pack

大数据之心 关注 0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7喜欢 9 简介 X-Pack 已经作为 Elastic 公司单独的产品线,前身是 Shield, Watcher, Marvel, Graph, 和 reporting,先来说说这几个爸爸是做什么的吧: Shield: 提供对数据的 Password-Protect,以及加密通信.基于角色的权限控制,IP 过滤,审计,可以有效地: 防止未授权的访问:基于 Password-Protect,基于角

Azure Stack技术深入浅出系列3: Azure Stack运维工具Azure Stack Tools的使用及实战

源自 Azure 的 Azure stack 作为一款业界唯一的和领先的公有云平台一致的混合云平台,能够帮助企业客户从自有数据中心交付 Azure 云服务.作为<Azure Stack 技术深入浅出系列>的第三篇文章,本文将介绍 Azure Stack 部署完成以后,如何快速的管理和维护这套系统环境,包括虚拟机的管理.远程 VPN 连接.传输部署镜像.远程监控等.本文将通过一套 Azure Stack 运维工具集--Azure Stack Tools 来尝试使用和管理 Azure Stack

洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与