- 系统环境和ide说明
Ubuntu16,idea和clion皆为2022.1。
- 代码导入clion
把编译好的openjdk8(编译时需用bear生成compile_commands.json,编译方法见Ubuntu14/16编译openjdk8)导入clion项目。
- clion配置
File=>settings,配置custon build targets,内容如下图,working directory里面是openjdk的目录
- 通过java -version命令调试
点击上方配置,增加下面Custom Build Applicaion配置,make为我们上面增加的配置,注意Executable要选择我们编译出来的java
然后我们在openjdk8/hotspot/src/share/vm/prims/jni.cpp文件的create_vm上增加断点,接着通过上方debug按钮,即可调试,下面可以看到正确执行到了断点上,同理调试自己写的java类,也可以编译成class后,直接java xxxx(带main函数的类)
- clion和idea下代码实现联合调试
在idea端,新建个打包成jar的maven项目,然后再pom.xml文件里面修改打包配置,然后maven install即可生成jar
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>org.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
接着编辑运行配置,增加一个Remoto JVM debug,如下图jarDebugMain,下面参数自动带一般只需修改端口号即可,和下面clion处配置对应,此处配了8080
在clion端,增加debugJarTestOpenJdk8运行配置,如下面图所示
Program arguments里面的参数为(后面的jar,为idea下maven命令生成的,见上方):
-jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8080 testopenjdk8-1.0-SNAPSHOT.jar
Working directory里面的参数为Idea中maven install生成jar的目录
上面两个配置都配置好后,首先运行clion中的debugJarTestOpenJdk8配置
下方控制台会输出,正在监听
然后运行idea上的jarDebugMain配置,此时,能触发clion处打在cpp文件上的断点,可以同样用jni.cpp做测试,并且输出内容会在clion上,如果修改文件,要重新maven install之后,再运行jarDebugMain。
- window上通过gdb调试openjdk
在linux端启动gdbserver服务(没有这个命令的话可以用apt-get install安装),如下面,其中java要用我们自己编译的
gdbserver *:1234 /opt/dev/workspace/clion/openjdk8/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
接着,在window端clion上导入我们编译好的openjdk8(拷贝linux中编译好的即可)。
然后按下方+号增加一个Remote Host配置(这步是使用linux环境中的配置,如果中间三列冒红的话,需要在linux中安装cmake(apt-get install cmake))
然后,在window的clion运行配置中增加一个Remote Debug,这里命名为openjdk8Remo,注意下方标红处的配置,下面remote处的分别是linux上和window上的openjdk路径。
接着windows上的clion代码处加断点,运行openjdk8Remo即可调试(相对linux直接调试会比较慢),接着结果会输出在linux端。