参考:
https://blog.csdn.net/faadfafasd/article/details/50539615
https://blog.csdn.net/tjiyu/article/details/53725247
https://my.oschina.net/haogrgr/blog/414825
1.导入项目到eclipse的选项:
File-> New -> Existing Code as Makefile Project
在界面中:
Existing Code Location:/opt/openjdk/hotspot
Toolchain:选Linux GCC,然后按Finish.
配置/opt/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java
右键工程 -> Debug As -> Debug Configurations -> 右键左边的C/C++ Application -> New -> 进入Main选项卡;
使用"/opt/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test"可以运行编译后的字节码;
/opt/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java为编译后的openjdk的入口,不再在eclipse中每次都使用源码来编译hotspot源码,勾选:Disable auto build
2.切换到Arguments选项卡,配置com.hotspot.test/Test0,【编译后的java文件】运行的参数,即要执行的类
3.在envirement配置CLASSPATH:Test0所在目录,我这里新建一个项目HotspotTest,不包括包名 和 JAVA_HOME 编译生成的jdk所在目录
CLASSPATH=.:/home/tzh/eclipse-workspace/HotspotTest/bin
JAVA_HOME=/opt/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/
4.增加调试参数,使用命令行如下:
/opt/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation Test
在eclipse中配置:上面的Arguments选项卡填写如下:
-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation com.hotspot.test/Test0
5.启动:
1./opt/openjdk/jdk/src/share/bin/main.c的 main(int argc, char **argv) 为入口
2.调用了/opt/openjdk/jdk/src/share/bin/java.c的JLI_Launch方法:
设置了jvm的参数,如-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation com.hotspot.test/Test0等
3.调用/opt/openjdk/jdk/src/solaris/bin/java_md_solinux.c的pthread_create新建一个线程
并调用pthread_join(tid, &tmp)等待该线程
4.启动后在新线程
1./usr/src/debug/glibc-2.17-c758a686/nptl/pthread_create.c调用了THREAD_SETMEM (pd, result, CALL_THREAD_FCT (pd)),pd保存了各种信息,包含了/opt/openjdk/jdk/src/share/bin/java.c的JavaMain方法
2./opt/openjdk/jdk/src/share/bin/java.c的int JNICALL JavaMain(void * _args)方法