dmtracedump 使用方法实战
dmtracedump介绍
dmtracedump命令在Sdk包中,路径是android-sdk/platform-tools/,也即是在adb的同级目录下。其中 dm以我的理解应该是 diagram method的首字母简写。dmtracedump主要用途是将我们在代码中添加Debug.startMethodTracing dump的trace文件转换为图表形式。能够帮助我们进行分析程序方法的调用流程。那么如何获取trace 文件呢,请看下面。
获取trace文件
如下面方法所示,在目标方法上下分别加上startMethodTracing,stopMethodTracing,编译运行程序(需要申请读写文件权限),那么在手机的sd卡(内置/外置)Android/data/com.android.mms/files 下有相应的trace文件。将此文件导出到dmtracedump的目录文件夹下。
SimpleDateFormat dateFormat =new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
Debug.startMethodTracing(logDate);
params[i].run();// 追踪此方法
Debug.stopMethodTracing();
生成调用图
调用下面命令时,请安装graphviz dot插件。
sudo apt-get install graphviz
./dmtracedump -g aabc.png 23_02_2019_04_36_49.trace
执行需要一点时间,终端输出如下类似的日志:
nt/AsyncQueryHandler;ILjava/lang/Object;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Z DefaultIpComposeActivityExt.java
---------------------------------------------
3 0.0 99.9 1+0 handleIpMessage
3 3 100.0 100.0 1+0 [4511] com.mediatek.mms.ipmessage.DefaultIpComposeActivityExt.handleIpMessage (Landroid/os/Message;)Z DefaultIpComposeActivityExt.java
---------------------------------------------
3 0.0 99.9 1+0 ctlOf
3 3 100.0 100.0 1+0 [4514] java.util.concurrent.ThreadPoolExecutor.ctlOf (II)I ThreadPoolExecutor.java
---------------------------------------------
2 0.0 99.9 1+0 getHyphenationFrequency
2 2 100.0 100.0 1+0 [4516] android.text.PrecomputedText$Params.getHyphenationFrequency ()I PrecomputedText.java
---------------------------------------------
2 0.0 99.9 1+0 setLayoutInflater
2 2 100.0 100.0 1+0 [4517] android.view.ViewStub.setLayoutInflater (Landroid/view/LayoutInflater;)V ViewStub.java