如何在 Android 源代码中启用 ILOGV 语句?

How to enable ILOGV statements in the Android source code?

Android 4.3中根据source code documentation,Dalvik解释器位于dalvik/vm/mterp/。但是我怎样才能启用 ILOGV 语句,以便我可以在运行时 汇编代码中看到解释的字节代码 ?

例如,在InterpC-portable.cpp line #1185中,汇编代码似乎是移动操作码(字节码)在 ILOGV 语句中:

ILOGV("|move%s v%d,v%d %s(v%d=0x%08x)",(INST_INST(inst) == OP_MOVE) ? "" : "-object", vdst, vsrc1,
kSpacing, vdst, GET_REGISTER(vsrc1)); 

我只需要启用 ILOGV 语句来打印它的内容。默认情况下,ILOGV 语句是 在 Android 源代码中禁用,我需要启用它们。

更新1:

上面的代码似乎打印字节码而不是汇编语言代码或机器语言代码。在 Android 源代码中将打印语句放在哪里,以便在 CPU 执行它之前打印解释的字节码(汇编语言代码或机器语言代码)?

如果您启用那些 ILOGV 语句,您将会收到大量的日志垃圾邮件。设备上的每个进程都会为执行的每个 dalvik 指令向 logcat 打印一条消息。

如果我这样做,我会采取不同的方法。我会从进程中提取 dex 文件,使用类似 ptrace 的东西,然后 运行 baksmali 就可以了。

但如果您真的想启用它,很容易找到 ILOGV is defined. As you can see, ILOGV is only enabled if the LOG_INSTR symbol is defined. Another quick search shows a handy #define statement for LOG_INSTR 前面被注释掉的文件中的位置。

看起来您应该能够取消注释并重新编译 dalvik 以生成您似乎想要的大量疯狂的垃圾邮件。

请记住,dalvik different interpreters. The portable c interpreter, and arch specific interpreters, etc. So you'll need to be aware of which interpreter is being used on your device, and make sure to modify the correct one -- or just modify all them. E.g. by modifying the common header.cpp and running rebuild.sh 可以重新生成各种解释器。