到目前为止,我做了一个只有一个方法的小类,用于向任何方法添加logcat跟踪。我可以编译和启动应用程序,但该方法不打印任何内容。
我有一个本地参数,它是logcat的一个简单的tag,这个本地参数是v0,我从我想要添加跟踪的方法中得到它。和参数p0。我相信有什么问题,但是dalvik调试器没有打印出任何错误,因此我不知道我的错误在哪里。
下面是我的代码。
.class public Landroid/MyCustomClass;
.super Ljava/lang/Object;
.source "MyCustomClass.java"
.method public static add_trace(Ljava/lang/String;)V
.locals 1
.prologue
const-string v0, "myTag"
.line 10
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 13
return-void
.end method下面是我如何调用该方法的一个示例:
.method public constructor <init>()V
.locals 1
.prologue
.line 157
const-string v0, "settings.properties"
invoke-direct {p0, v0}, Lse/smartrefill/AbstractApplication;-><init>(Ljava/lang/String;)V
.line 158
# has been edited
const-string v0, "<init>()V"
invoke-static {v0}, Landroid/MyCustomClass;->add_trace(Ljava/lang/String;)V
return-void
.end method更进一步,我想知道是否有任何方法可以打印出方法的返回寄存器的值。
我知道Java语言中每种类型的变量都继承自Object,且Object有一个方法toString(),所以理论上应该可以定制我的方法add_trace()来获取运行时返回的寄存器的值。有人能帮我一下吗?
谢谢。
发布于 2015-06-29 02:58:07
我通过如下修改我的方法解决了问题的第一部分:
.method public static add_trace(Ljava/lang/String;)V
.locals 1
.param p0, "my_message" # Ljava/lang/String;
.prologue
const-string v0, "my_tag"
.line 10
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 13
return-void
.end method下面是我打印返回的寄存器的代码,不过我还没有测试它:
.method public static add_trace(Ljava/lang/String;Ljava/lang/Object;)V
.locals 3
.param p0, "my_message" # Ljava/lang/String;
.param p1, "returned_register" # Ljava/lang/Object;
.prologue
.line 25
const-string v0, "my_tag"
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1, p0}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-string v2, ":"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 48
return-void
.end methodhttps://stackoverflow.com/questions/31101740
复制相似问题