源码分析方式
关于如何配置源码这里给出一个链接 https://blog.csdn.net/turtlejj/article/details/83857897
主动调用 跟着源码一步步点 适用于重写的方法 直接调用的方法
被动调用 打印日志 (以Activity::onCreate方法为例)
Log.i("test","onCreate",new Exception());
logcat -c 清除缓冲区中的全部日志并退出(清除完后可以使用-g查看缓冲区)
logcat -s xxx 设置过滤器
grep "xxxxx" ./ -rn 当前路径下搜索目标内容 适用于跨进程调用无法利用堆栈找到相关调用链的场景
adb shell dumpsys activity activities | grep "Resumed" 查看当前最顶端的activity
ps -A | grep "目标进程" 查看目标进程的pid
tree external/test 查看目录结构
make -j8 ANDROID_COMPILE_WITH_JACK=false 关闭jack编译
android native 堆栈打印
C++代码架构经常特别复杂,可以使用android::CallStack将所在线程的调用栈打印出来
基本用法:
cpp文件里面
1、进入对应的cpp文件,放开#define LOG_NDEBUG 0注释,且变成
#define LOG_NDEBUG 1
2、声明头文件
#include<utils/CallStack.h>
#include<utils/Log.h>
3、调用方法:
android::CallStack stack;
stack.update();
stack.log(debug); //输出到logcat
4、mk或者bp中需要链接以下so库:
libutils
libcutils
adb logcat -b all | grep "BootAnimation::android"
godv@godv-OptiPlex-7070:~/godv/AOSP/android-8.1.0_r1$ adb logcat -b all | grep "BootAnimation::android"
05-13 23:29:29.248 2098 2178 D BootAnimation::android: #00 pc 00000000000082bd /system/lib64/libbootanimation.so (android::BootAnimation::movie()+61)
05-13 23:29:29.248 2098 2178 D BootAnimation::android: #01 pc 0000000000007de9 /system/lib64/libbootanimation.so (android::BootAnimation::threadLoop()+57)
05-13 23:29:29.248 2098 2178 D BootAnimation::android: #02 pc 000000000001187a /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+314)
05-13 23:29:29.248 2098 2178 D BootAnimation::android: #03 pc 0000000000079f3b /system/lib64/libc.so (__pthread_start(void*)+27)
05-13 23:29:29.248 2098 2178 D BootAnimation::android: #04 pc 0000000000028c8d /system/lib64/libc.so (__start_thread+61)
05-13 23:29:29.248 2098 2178 D BootAnimation::android: #05 pc 0000000000027515 /system/lib64/libc.so (__bionic_clone+53)