android分析追踪调试 mingling android native 堆栈打印

源码分析方式

关于如何配置源码这里给出一个链接     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)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值