2025年systrace工具(Systrace工具)

systrace工具(Systrace工具)有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等 比如 native crash 在企业里面该如何准确定位具体代码函数 程序卡住 或者长时间没反应 想要看看卡在代码的哪里 针对以上的一些问题 我这边分享一些工作中常用积极该类问题的一些辅助工具命令技巧 帮助大家更好的在工作中定位这类问题 先看看常见 native 日志中可以获取的堆栈情况 上面堆栈都是一些地址码和大概的函数堆栈

大家好,我是讯享网,很高兴认识大家。



有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等,比如native

crash在企业里面该如何准确定位具体代码函数,程序卡住,或者长时间没反应,想要看看卡在代码的哪里。针对以上的一些问题,我这边分享一些工作中常用积极该类问题的一些辅助工具命令技巧,帮助大家更好的在工作中定位这类问题。

先看看常见native日志中可以获取的堆栈情况

上面堆栈都是一些地址码和大概的函数堆栈,所以一般没办法直接和java代码一样定位到具体的行数等。一般user版本也就只有上面的crash的堆栈信息,虽然没办法定位到具代码crash行数,但是可以得到一些线索:

1、根据堆栈可以得出这个其实是一个空指针的crash

2、crash的地方可以大概定位到是在  /system/bin/robert 的print_all_event()方法

但是具体函数user版本的话就看不出来,如果可以复现的话其实这个问题也好处理,因为可以考虑直接系统上复现,使用源码进行debug到具体函数,再不行还可一行行打log也可以缩小定位。

有源码+可以复现crash情况下,可以使用工具llvm-addr2line定位具体代码行数,方法如下:

上面来举例,堆栈获取最顶部的一行

#00 pc 0000000000009f18  /system/bin/robert (print_all_event()+60)

0000000000009f18就是16进制地址  robert就是bin print_all_event方法 就拿上面案例来测试:

去除路径核心就是 : llvm-addr2line -Cfe robert 0000000000009f18 print_all_event

上面经过工具后既可以得到出错代码是在 robert/getevent.cpp:270 下面看看这个270行代码

确实有空指针

经常调试偶尔发现app可能卡住,没反应的情况,这个时候就很希望知道卡住这时候的进程的一个运行情况,希望可以得到一个和anr trace一样的文件来方便分析定位线程状态,即想要获取进程的backtrace。 注意获取进程backtrace方法都需要root

使用命令:


讯享网

执行后在/data/anr/目录生成backtrace文件

pull出anr下面的文件及打开:

可以看出卡顿时候其实是main主线程卡在onResume方法里面,线程处于sleep

使用debuggerd 命令 debuggerd -b pid (针对native bin)

案例如下: robert进程的backtrace

更多framework详细代码和资料参考如下链接

投屏专题部分:

hal+perfetto+surfaceflinger

https://mp.weixin..com/s/LbVLnu1udqExHVKxd74ILg 其他课程七件套专题:

点击这里 https://mp.weixin..com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:https://www.bilibili.com/video/BV1wc41117L4/

参考相关链接: https://blog.csdn.net/zhimokf/article/details/

更多framework假威风耗:androidframework007

小讯
上一篇 2025-05-11 14:00
下一篇 2025-05-26 22:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/149288.html