source build/envsetup.sh&&lunch rk3288-userdebug
启动环境
cd ./art/runtime
mm -j8
编译好的文件位于
/out/target/product/rk3288/system/lib
libart.so
如果是从ArtMethod的Invoke调用的。那么进入EnterInterpreterFromInvoke 这里会调用Execute
比如 func aaaa ()
{
call bbbb
}
Execute执行函数 aaaa 解析字节码执行进入ExecuteSwitchImpl执行对各种字节码进行解析。
遇到call bbbb肯定执行INVOKE指令
于是执行 DoInvoke -> DoCall->DoCallCommon
DoCallCommon根据需要执行
ArtInterpreterToInterpreterBridge 解释器到解释器的执行 (同样调用了Execute)
ArtInterpreterToCompiledCodeBridge 解释器到编译代码的执行(调用Invoke Invoke根据需要执行已编译代码的CompiledCode执行)
自己修改的时候增加一个参数ShadowFrame*执行处理,在Instrucmentation里面。