编译可调试的 OpenJDK8

2020.12.07 更新

CLion 调试代码的方式有问题,在代码中打断点的位置和代码执行的位置不一致,调试体验很差。
现在已经不用Clion调试代码了,改为采用VSCode,可正常debug。

请阅读文章 使用VSCode调试OpenJDK8


以 Manjaro 20.1 为例

系统环境

➜  ~ uname -r
5.4.57-1-MANJARO
➜  ~ make -version
GNU Make 4.3
➜  ~ gcc -v
...
gcc version 10.2.0 (GCC) 
➜  ~ g++ -v
...
gcc version 10.2.0 (GCC) 

安装必要的编译、调试软件

  • CLion C and C++ IDE
  • compiledb Tool for generating Clang's JSON Compilation Database file for GNU make-based build systems
  • Building the JDK 编译需要的安装包参考
  • mercurial sudo pacman -S mercurial
  • OracleJDK7 作为编译OpenJDK8 的 bootSDK

获取源码

需要挂梯子

# 根据自己的实际情况配置
export ALL_PROXY=socks5://127.0.0.1:1080
# 这里最好用jdk8u, 不容易出问题
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/
# 进入目录
cd jdk8u
# 执行脚本,拉取所有代码
bash ./get_source.sh

配置源码

# 移除环境变量配置
unset JAVA_HOME
# 生成debug版本的 openjdk8
bash ./configure --enable-debug --enable-debug-symbols --disable-zip-debug-info --with-boot-jdk=/home/zero/Documents/Java/jdk1.7.0_80

编译源码

# 源码里将所有的warn处理为error。 这里必须配置WARNINGS_ARE_ERRORS=""
# compiledb 是为了生成 compile_commands.json
compiledb make WARNINGS_ARE_ERRORS="" images 

CLion 导入项目

File -> Open 选择 compile_commands.json -> 选择 open as project

CLion 运行、调试设置

详见 custom-build-targets

GDB 配置

vim ~/.gdbinit

handle SIGSEGV nostop noprint pass
handle SIGBUS nostop noprint pass
handle SIGFPE nostop noprint pass
handle SIGPIPE nostop noprint pass
handle SIGILL nostop noprint pass

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。