dmtracedump 使用方法实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linglaoli/article/details/87894721

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

部分截图

猜你喜欢

转载自blog.csdn.net/linglaoli/article/details/87894721