学习android5.0以后的ART虚拟机,看了看源码,比较头疼,决定通过动态调试的方式去学习。
Art虚拟机有一个dex2oat的可执行程序。就想到了通过gdb和gdbserver来debug这个dex2oat。
记录一下调试方法:
gdb运行在本地系统(windows/linux)
gdbserver运行在android真机/模拟器上(adb shell ls /system/bin查看是否有gdbserver,如果没有,可以从源代码prebuild文件夹中获取,也可以从ndk的文件中获取)
Ps:gdb和gdbserver的版本要一致,不然会出错的
一:“
1,准备工作:
1-1,在prebuild文件夹中找到gdb和gdbserver的可执行文件(ndk中也有)
1-2,把gdbserver 通过adb shell push进system/bin
1-3,把dex2oat需要的hello.jar给push到/data/test/中
2,通过adb在android模拟器中通过gdbserver关联相关的进程或者启动相关进程
2-1,gdbserver关联相关的进程 : adb shell gdbserver :端口号1234--attach 进程pid
(进程pid可以通过adb shell ps查看,调试应用可以attach system_process(没有测试))
2-2,gdbserver启动相关的进程: adb shell gdbserver :端口号1234 dex