zoukankan      html  css  js  c++  java
  • smali插入log,打印变量

    一:Log打印变量:

    Log打印字符串:

    #liyanzhong debug
    const-string v1, "TAG"
    const-string v2, "xunbu7@163.com"
    #v2 为要输出的调试信息字符串
    invoke-static {v1,v2} ,Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    Toast显示字符串:

    const-string v0, "Must ensure vx is Context class, then Toast.makeText(vx, xxx, 1).show();" # CharSequence对象类型
    const/4 v1, 0x1 # I int类型
    invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast; # p0 是一个Context
    move-result-object v0
    invoke-virtual {v0}, Landroid/widget/Toast;->show()V
    
    
    .locals 4
    。。。。。
    const-string v3, "zhangmin"
    invoke-static {v3, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    注意:在函数的开头要至少增加一个寄存器(.locals 的值增加一个)。

    假如Log.d()函数的第二个参数为null,那么运行时会报错,可以用下面的方法解决:

    invoke-static {v1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
    move-result v2
    if-nez v2, :errornull_1
    const-string v3, "zhangmin"
    invoke-static {v3, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
    :errornull_1

    如果查看int值,首先要将变量转为String,再来查看,需要添加2个寄存器:

    .locals 5
    #......
    const/high16 v1, 0x7f030000
    const-string v3, "zhangmin" invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; move-result-object v4 invoke-static {v3, v4}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    查看boolean值的打印类似int,先转换成String:

    .locals 5
    #......
    const-string v3, "zhangmin"
    invoke-static {v1}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
    move-result-object v4
    invoke-static {v3, v4}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    二:栈跟踪法:

    在目标位置处直接插入下面代码,查看堆栈:

    invoke-static {}, Ljava/lang/Thread;->dumpStack()V

    它的标签为:System.err,效果如图:

  • 相关阅读:
    NSArray & NSDictionary
    copy&mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)
    03-图形上下文栈, 图形的平移 旋转 缩放
    02- 画文字和图片-------------之前写的那个微博项目,可以试试用画图片的方式来处理,这样应该比UILabel 代码少点,一会试试
    Quartz 官网翻译(转载)
    01 画简单线的方法
    @property 修饰符
    SEL 类型
    Java 常用快捷键
    Java判断是否为数字
  • 原文地址:https://www.cnblogs.com/xunbu7/p/4124735.html
Copyright © 2011-2022 走看看