Android动态调试--1

  • 终于来到动态调试

使用DDMS

它的文件浏览、LogCat以及method profiling功能是使用最多的功能

文件浏览查看需要分析的程序在安装目录下生成的文件,分析这些文件的内容可以对程序的设置及数据有初步的了解

LogCat则可以输出软件运行时的调试信息

method profiling用于跟踪程序的执行流程


android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,

DEBUG,INFO,WARN,ERROR。

  1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v(“”,””);

  2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择;

  3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息;

  4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息;

  5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了;


代码注入法

所谓的代码注入就是反编译Android程序,然后在反编译出的smali文件中添加log调用的代码,最后打包程序运行来查看结果。

代码添加:一般形式如下

invoke-static{v3,v0},landroid/util/log;->v(Ljava/lang/String;Ljava/lang/String;)

栈跟踪法

使用特征函数法来查找Toast的调用

只需要在它的调用函数下面添加相应代码即可

1
2
3
4
5
6
7
8
9
10
11
12
13
//java
new Excption("print trace").printStackTrace();
//smali
new-instance vo,Ljava/lang/Exception;
const-String v1,"print trace"
invoke-direct {vo,v1},Ljava/lang/Exception;-><init>(Ljava/lang/Sring;)V
invoke-virtual{vo}, Ljava/lang/Exception;->printStackTrace()V
文章目录
  1. 1. 终于来到动态调试