博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android打印调用栈的方法
阅读量:3523 次
发布时间:2019-05-20

本文共 742 字,大约阅读时间需要 2 分钟。

打印调用栈是android平台问题定位的基本方法,如果需要知道谁在调用某个函数,可以在此函数中添加打印调用栈函数,弄清楚函数之间的调用关系。

1. Java层打印调用栈方法
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
Log.w(TAG, "Called: " + this, here);

 

2. C++层打印调用栈方法

CallStack stack;

stack.update();
stack.dump();

备注:下面操作是可选操作,但加上去之后会有一些额外的功能

#define HAVE_DLADDR 1 :可以从lib中自己转成c++代码行,不需要手动反编译

#define HAVE_CXXABI 1:将c++ 已被name mangling的函数名转化为源文件中定义的函数名。

并在文件frameworks/base/libs/utils/Android.mk中大约105行(LOCAL_SHARED_LIBRARIES)后添加

ifeq ($(TARGET_OS),linux)

LOCAL_SHARED_LIBRARIES += libdl

endif重新编译push生成的libutils.so到/system/lib/目录下,重启设备。

此外,由于CallStack.dump中使用的LOGD进行的打印,因此需要将后台的Log Level设置为D一下才能出来。

 

3. C函数打印调用栈

可以参考CallStack.cpp的实现,通过调用_Unwind_Backtrace完成。

 

4. Kernel层打印调用栈方法

dump_stack();函数

转载地址:http://ueqqj.baihongyu.com/

你可能感兴趣的文章
Cache模拟器的实现
查看>>
实验2:MIPS指令系统和MIPS体系结构
查看>>
设计模式七大原则
查看>>
手写 | spring事务
查看>>
AndroidStudio Gradle手动下载
查看>>
SpringBoot入门(二)场景启动器
查看>>
SpringBoot入门--自动配置
查看>>
springboot读取配置文件 例:读取配置文件的优先顺序;在主配置文件中激活其他配置文件;加载非主配置文件
查看>>
自动配置原理
查看>>
TCP协议
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
redis 持久化详解,RDB和AOF是什么?他们优缺点是什么?运行流程是什么?
查看>>
spring注解版(一)
查看>>
SpringBoot中访问控制层(controller)得不到Json数据
查看>>
react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
查看>>
BFC(Block Formatting Context)
查看>>
什么是作用域,什么是闭包,什么是作用域链
查看>>
惰性求值,面向对象
查看>>
lodash源码分析之baseSlice()函数
查看>>
数据结构之列表
查看>>