前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM | Clion导入OpenJDK11源码并调试

JVM | Clion导入OpenJDK11源码并调试

作者头像
微笑的小小刀
发布2020-02-17 14:00:27
4.7K0
发布2020-02-17 14:00:27
举报
文章被收录于专栏:java技术大本营

读书要注意的点

1. 《HotSpot实战》是基于JDK7的源码,所以启动类的位置稍有些不一样

2. 《深入理解java虚拟机》中推荐的CmakeList.txt的github地址,是针对于Windows而言,linux和mac 不太适用. 昨天改了半天还改成功, 但是其中的写法可以学习参考

导入源码到CLION

打开CLION -> New CMake Project from Sources

然后选择JDK源码目录,然后按默认勾选,点OK,如下图所示:

调整CMakeList.txt

如果直接按默认的CMakeList.txt来, 会发现任意打开一个代码, 都是全面飘红.

保留下来的CMakeList.txt 主要有两部分:

一.include_directories

这个是为了构建代码索引, 在Clion中看起来不是全面飘红

二.add_executable

这个是为了能在Clion中创建执行程序, 可以直接执行我们的java程序

然后原有的test目录都删除掉

完整的CMakeList.txt因为大长,就不复制,可前进github查看:

https://github.com/xiaodaojava/openjkd11-CmakeList

开始调试

在右上角,和idea一样的位置,创建一个Cmake Application

然后我们把断点打到jdk11/src/java.base/share/native/libjli/java.c 394行

如下图所示:

然后点击debug运行:

可以看到进入断点,并且在Debug面板可以看到我们传入的-version参数

在调试过程中,会遇到error: No current target; cannot handle signals until you have a valid target and process.这个错, 先不管, 直接继续运行

最终会在控制台看到如下输出:

LLDB的Signal: SIGSEGV (signal SIGSEGV)

解决上面出现的LLDB异常暂停的错误,需要我们在入口断点处也就是进入到394行时就输入如下命令

process handle --pass true --stop false SIGSEGVprocess handle --pass true --stop false SIGBUS

如下图所示:

然后放过断点继续运行,可以看到, 这次程序没有意外暂停, 而且在控制台输出

总结

开始的调试并不麻烦,也只传了一个-version参数做测试. 后面我们要编写java程序, 并且观察虚拟机是如何执行我们的java代码,大家一起加油!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java技术大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 读书要注意的点
  • 导入源码到CLION
  • 调整CMakeList.txt
  • 开始调试
  • LLDB的Signal: SIGSEGV (signal SIGSEGV)
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档