Android 打印函数调用堆栈调试
来源:互联网 发布:mac 鼠标右键 触摸屏 编辑:程序博客网 时间:2024/05/16 14:06
java 层
可以利用抛出异常来打印:
1
2
3
RuntimeException here =
new
RuntimeException(
"here"
);
here.fillInStackTrace();
Log.i(TAG,
"call statck is"
, here);
native 层
可以利用 android 的 CallStack 来打印:
1
2
3
4
5
6
CallStack stack;
stack.update();
stack.dump(
"SurfaceFlinger"
);
// 4.4 的接口变了 dump 是用来把 log 保存到文件里面去的
// 单纯的打印用这个: statck.log("SurfaceFlinger")
要调用这个类的方法先插入 CallStack 头文件,然后在 Android.mk 中链接 utils 库就可以:
1
2
#include <utils/CallStack.h>
LOCAL_SHARED_LIBRARIES := libutils
这个可以自己去看 CallStack.h 的头文件(frameworks/base/native/include/utils/CallStack.h),方法的定义:
1
2
3
4
5
6
7
8
// 第一个参数没去研究啥作用,用默认的1吧,
// 第二个参数好像是设置追踪的最大调用堆栈深度,默认是 31
void
update(int32_t ignoreDepth=1, int32_t maxDepth=MAX_DEPTH);
// 这个就是把调用堆栈信息输出到 android 的 log 里面,
// 那个参数是 log 前面的前缀
// Dump a stack trace to the log
void
dump(
const
char
* prefix = 0)
const
;
效果如下:(注意 logcat 的 TAG 是 CallStack -_-||)
1
2
3
4
5
6
7
8
9
10
D
/CallStack
( 101): SurfaceFlinger
#00 pc 00028a84 /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::captureScreen(android::sp const&, android::sp*, unsigned int*, unsigned int*, int*, unsigned int, unsigned int, unsigned int, unsigned int)+63)
D
/CallStack
( 101): SurfaceFlinger
#01 pc 000262a4 /system/lib/libgui.so (android::BnSurfaceComposer::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+523)
D
/CallStack
( 101): SurfaceFlinger
#02 pc 00029836 /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+105)
D
/CallStack
( 101): SurfaceFlinger
#03 pc 0001435e /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+57)
D
/CallStack
( 101): SurfaceFlinger
#04 pc 00016f5a /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+513)
D
/CallStack
( 101): SurfaceFlinger
#05 pc 00017380 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+183)
D
/CallStack
( 101): SurfaceFlinger
#06 pc 00000820 /system/bin/surfaceflinger
D
/CallStack
( 101): SurfaceFlinger
#07 pc 00000844 /system/bin/surfaceflinger
D
/CallStack
( 101): SurfaceFlinger
#08 pc 0001271c /system/lib/libc.so (__libc_init+35)
D
/CallStack
( 101): SurfaceFlinger
#00 pc 00028a84 /system/lib/libsurfaceflinger
0 0
- Android 打印函数调用堆栈调试
- android函数调用堆栈打印方法
- Android函数调用堆栈打印方法
- 打印函数调用堆栈
- 打印函数调用堆栈
- android打印调用堆栈
- 打印 JavaScript 函数调用堆栈
- linux打印函数调用堆栈
- IOS 打印函数调用堆栈
- lua 打印函数调用堆栈
- Android 调试之打印堆栈
- Android 打印方法调用堆栈
- go 代码的调试---打印调用堆栈
- Android上面打印函数堆栈
- (zt)打印函数调用堆栈
- 打印函数调用堆栈 故意制造错误
- 打印函数调用的堆栈信息
- Android下打印调试堆栈方法
- zookeeper-3.4.6 分布式安装与配置
- 小小黑客之路(一)——端口扫描器
- ubuntu git使用方法
- JAVA 日期操作
- 欢迎使用CSDN-markdown编辑器
- Android 打印函数调用堆栈调试
- HAOREN
- C_Catch That Cow
- spring学习笔记(2)——bean的配置
- Eclipse项目发布到Tomcat下被加载两次
- uva 10047 uva live 2035 The Monocycle bfs
- 2015年腾讯阿里实习生招聘面试经历
- 湖南2014CPC 题目 C. 酷酷的单词
- Tomcat源码阅读系列(三)启动和关闭过程