写在前面
之前写过在mac中调试openjdk,使用的工具是xcode。
但是这个xcode使用起来太过麻烦,有不少不人性化的设计,所以现在决定使用clion来编译和调试java,所以把过程中需要注意的实现记录下,以便后续参考
正文
下载并按照指引激活clion:https://sx.gxkjbg.com/201904/tools/JetBrains.CLion.2019.macOS_jb51.zip
和idea类似,导入Hotspot:new make project from source,选择:OPENJDK_HOME/src/hotspot
如果想要即时build,我研究了一半,没成功,但是也记录下,需要完善clion自动生成的cmakeList,添加如下配置,build的时候需要这些参数,参数配置如下:
- //主要设置了INCLUDE_SUFFIX_OS 、INCLUDE_SUFFIX_COMPILER 、INCLUDE_SUFFIX_CPU
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_GNU_SOURCE \-D_REENTRANT \ -DLINUX -DINCLUDE_SUFFIX_OS=_linux -DVM_LITTLE_ENDIAN \ -DTARGET_COMPILER_gcc \ -DAMD64 -DHOTSPOT_LIB_ARCH='amd64' -DINCLUDE_SUFFIX_CPU=_x86 -D_LP64 -DTARGET_ARCH_x86 \ -DINCLUDE_SUFFIX_COMPILER=_gcc -DCOMPILER1 -DCOMPILER2")
- //主要设置了INCLUDE_SUFFIX_OS 、INCLUDE_SUFFIX_COMPILER 、INCLUDE_SUFFIX_CPU
开始配置:config run,配置如下,作用是利用java命令在openjdk的jvm下运行编译好的class,并可以在源码上调试Hotspot:
上图具体参数如下:
program args:-XX:NewSize=6m -XX:SurvivorRatio=4 -XX:MaxNewSize=6m -Xlog:gc*:stdout:time,level,tags -XX:+UseParallelGC -Dfile.encoding=UTF-8 -classpath /Users/lumi/code/test/src HelloWord //classpath 为字面意思,这里设置为下面complier后的class目录,HelloWord为main类名 working dic:/Users/lumi/code/test/src //工作空间,和class目录保持一致
配置run前的前置任务,网上很多文章说需要配置两个,但是我这里之配置了一个,因为我本地make一致不成功,而且没有改动jvm的源码是不需要make的,只需要complier java源码即可,complier配置如下,功能是修改源码后,通过javac重新编译java代码,并在指定目录生成class:
-
- 上图详细命令如下
- program:/Users/lumi/code/openJDK/jdk14uM/build/macosx-x86_64-server-slowdebug/jdk/bin/javac
- args:/Users/lumi/code/test/src/HelloWord.java
- workdic:$ProjectFileDir$ //和run命令保持一致
- 上图详细命令如下
-
通过如上配置就可以进行实时修改java源码,debug调试jvm源码啦,很是方便和快捷,结果如下