博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android下的一些调试手段(含kernel调试办法)
阅读量:5750 次
发布时间:2019-06-18

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

主要介绍除了常规的kernel的printk和android的DDMS, logcat外的几个调试手段.

包括bugreport, oprofile, traceview, ftrace等.

 

Bugreport

Bugreport是android平台自带的工具, 收集了device端的详细的状况, 可以在console下直接运行“bugreport > /sdcard/bugreport.log”或者接入USB cable并打开adb debug的状况下运行”adb bugreport > bugreport.log”.
下面是一个抓取的bugreport的参考资料.
相关代码路径
frameworksasecmdsugreport
frameworksasecmdsdumpstate
frameworksasecmdsdumpsys

 

oprofile

Oprofie的原理比较简单: 很多CPU都提供一个所谓性能计数器的东西(performance counter),

大致的原理就是程序可以注册告诉CPU对什么event感兴趣(比如CPU_CYCLE, CPU经历了一次时钟周期),
然后CPU在执行了相应的操作后, 就会在性能计数器上加1, 这样程序就可以取出.
所以, 使用OProfile来定位CPU使用率的问题, 就变成了让oprofile收集程序运行过程中哪个可执行程序(或是so)中的哪个function, 消耗的CPU CYCLE最多.
在实际应用中, oprofile可以用来对找出系统的瓶颈并进行优化.
R70中默认的工程中, Oprofile是没有被编译进来的, 需要修改externaloprofileopcontrolandroid.mk和externaloprofiledaemonandroid.mk
两个文件中的LOCAL_MODULE_TAGS 属性从debug修改为eng或者user, 从而将oprofile编译进android中.
此外, Oprofile需要kernel中打开相应的compile option来支持, kernel对应代码在kernel race目录中. 相应的config如下:
General setup [*] Profiling Support
CONFIG_PROFILING
General setup <*> OProfile system profiling
CONFIG_OPROFILE
CONFIG_RING_BUFFER
CONFIG_RING_BUFFER_ALLOW_SWAP
CONFIG_RING_BUFFER_BENCHMARK is not set
General setup Kernel Performance Events And Counters
[*] Kernel performance events and counters
CONFIG_PERF_EVENTS
CONFIG_HW_PERF_EVENTS
Examples:
\

\

\

最后, 在PC端安装oprofile以便对device端生成的结果进行解析.

\

如果需要得到最后的图形结果, 还需要安装Graphviz.

\

 

所有的准备工作就绪后,只要在device端运行如下的命令,即可启动oprofile对device进行检测.

opcontrol–quick ===> setup相应的环境和参数

opcontrol–start ===> 启动oprofile

opcontrol–status ===> 中途可以查看oprofile的状态

opcontrol–stop ===> 停止oprofile

opcontrol–dump ===> 将结果保存至/data/oprofile 路径

 

最后, 在PC端运行android工程中的externaloprofile下的opimport_pull脚本, 即可生成相应的结果callgraph.txt, load.txt, load2.txt以及callgraph.png(如下).

\

 

注意, 在运行脚本前需要设置一些环境变量和device端kernel对应的vmlinux档案.

exportOPROFILE_EVENTS_DIR= {Your  Source DIR}/prebuilt/linux-x86_64/oprofile/

exportOPROFILE_BIN_DIR=/{Oprofile Bin DIR on Your PC }/

exportOUT= {Your Android Source DIR}/out/target/product/smdkv210

cd {Your Android Source DIR}/out/target/product/smdkv210/symbols

ln -s {Your Kernel Source DIR}/vmlinux ./vmlinux

 

traceview

Traceview是android自带的tool,用来分析在android端通过调用Debug.startMethodTracing(xxxx);生成的名为xxxx.trace的档案. 这个方法需要在android的代码中添加Debug.startMethodTracing(xxxx)和Debug.stopMethodTracing()的代码. 使用者通过在合理地点添加这两个函数, 可以很直观的分析在这个中间过程中, 的运行状况, 上到每个进程在什么时候开始跑了多长时间, 下到每个函数跑了多少次, 每次跑了多长时间.

\

 

Ftrace

 

ftrace是内建于内核的跟踪工具, 从2.6.27开始加入主流内核. ftrace的作用是帮助开发人员了解 Linux 内核的运行时行为, 以便进行故障调试或性能分析.

使用ftrace可以对内核函数调用、上下文切换进行跟踪, 还可以查看中断被关闭的时长, 跟踪内核态中的延迟以及性能问题等.

使用ftrace对内核进行跟踪调试, 可以找到内核中出现的问题的根源, 通过ftrace来观察内核中发生的活动, 则可以了解内核的工作机制.

Ftrace可以在device的UI没有反应, 但是console还是active的状况下对kernel进行分析.

Ftrace的功能需要在kernel中打开相应的config. 此外, 打开ftrace会给系统带来额外的overhead, 因此应该在release的版本中尽可能关闭ftrace的功能.

图 1.Kernel hackin

图 1. Kernel hacking

\

图 2. Tracers

\

图 3. 内核支持的跟踪器列表

\

R70的kernel中,Ftrace支持的tracer有 wakeup, preemptirqsoff, preemptoff, irqsoff, function, sched_switch共6种.

具体的使用方法可以参考Reference中的连接以及kernel中的documents race下的ftrace.txt

得到的一些结果如下:

 http://www.2cto.com/kf/201501/366871.html

转载于:https://www.cnblogs.com/tonny-li/p/4517896.html

你可能感兴趣的文章
mysql数据类型---数值型---int
查看>>
为eclipse安装maven插件
查看>>
公司新年第一次全员大会小记
查看>>
最懒的程序员
查看>>
JAVA8 Stream 浅析
查看>>
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
iOS 绕过相册权限漏洞
查看>>
我的友情链接
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
修改hosts文件里面的主机名,oralce asm无法启动
查看>>
Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Linux远程访问及控制
查看>>