mac os qt单步调试_阿里大牛手把手教你搭建单步调试openjdk环境

其实当初选择成为一个“人人敬仰”的程序猿,我相信大多数人都有一个梦:大神。选择说明热爱,有梦想说明有寄托。但是很多人走着走着就不见了踪影,梦为何破碎得如此之快。一个梦不坚持,就会有无数的梦,只不过真的只是梦。选择了,就只有一个目标,达到自己能达到的极限。OK?抛开恐惧,架起环境,探索JVM底层的秘密。

如果整个Java考卷是100分,最后的30分都跟JVM底层相关。Java自诞生至今已有20余年,企业为了筛人、个人为了增强竞争力,都在向底层靠近,研究得越来越深。所以现在的问题不是要不要学、学不学的懂,而是要学到什么程度的问题。三期开班将近,鉴于很多同学面对JVM源码束手无策,我整理了编译openjdk源码+单步调试的教程,希望能帮助同学们在研究JVM底层的道路上打开一扇窗。

我一直有一个观点:Java是短暂的,JVM是永恒的。现在很多语言都不开发运行环境了,都选择在JRE上运行,足以证明JVM的优越。可以说,你精通了JVM,未来的路才可能走得轻松。空闲之余,JVM值得每个人去深入研究,这份付出,一定会迎来意想不到的回报。

前言

说下我的编译环境

我编译用到的所有镜像、软件都可以分享给大家,需要的同学关注【启明南】公众号后回复:单步调试JVM,建议大家与我的环境保持一致,这样你遇到的问题我才方便给你解答

操作系统:Ubuntu16

boot jdk:jdk7

编译的jdk:jdk8

看源码工具:Clion、NetBeans

编译

1、安装依赖

sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache

2、boot jdk

因为openjdk源码中有些功能是用Java代码实现的,比如调试工具:jps、jstat等,还有一些核心jar包,如rt.jar、tools.jar等,都需要相应版本的JDK。boot jdk需要比你编译的jdk版本低,我只测试了低一个版本,低多个版本有没有问题,喜欢探索的同学可自行测试。

直接解压到Documents目录下,然后配置下环境

3ecdc4d79f4a0c96ed050bd6edf0497e.png

3、配置openjdk

默认情况下configure不是可执行文件,执行命令

chmod u+x configure

执行配置命令

sudo ./configure --with-target-bits=64 --with-boot-jdk=/home/ziya/Documents/jdk1.7.0_80 --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0

看到这个画面就证明配置成功了,就可以编译了。如果不是,就得一步步把问题解决了再重新配置

9735b2fc6f1336a1a8f0ab8aeeed38bf.png

4、编译

sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0

看到下面这个画面就证明编译成功,就可以用了

7b0db2a6ae101aaa96a6acdc5b66b5bb.png

5、验证

da67a2b949f8d1371dcc214b76378aec.png

单步调试

我一般是clion+NetBeans+lldb结合起来用

1、clion

这个IDE不支持Makefile,仅支持cmake,比较麻烦。这里大家也不用花时间去学习cmake了,我会把我写好的cmakefile分享给大家(有好几种写法,我分享最简单的一种)。来看下单步调试效果

346a251ad5f6ecc8ff52432033aa5bb8.png
a35cd888968c98bd2eae84060df044b8.png

调试过程中会出现段错误导致程序终止,加上这句话忽略SIGSEGV信号

process handle --pass true --stop false SIGSEGV

时机:在发生段错误之前都行,我一般是进入了调试程序就马上加上。目录下加.gdbinit文件也行

81359754026b0b32a41b1e443a953a06.png

2、NetBeans8.2

这个IDE支持Makefile,但是高版本就不支持了,所以只能用8.2版本

注意是新建项目,它会根据Makefile将项目构建好。后面就是一直下一步、下一步……

08ae58986b553f49bb1cd4c72ceb956e.png

项目构建好后,点击【定制】配置调试环境

4036bf8e8d47414af0190beb21855be1.png
5ea72acbe7dc002797b2073626fc21dd.png

-cp即classpath,后面是要运行的class文件,这样调试环境就搭建完成。

5675ce3a675308c0a6995fe74f10cc14.png

GDB与LLDB

这两个都是命令行调试程序,gdb是老牌的,lldb是轻量级的,输出更友好。lldb是xcode内置的调试器。

结语

至此,编译openjdk及单步调试环境就搭建好了。虽然我的教程已经写得很详尽,但第一次搭建可能还是会遇到一些坑,一些比较难解决的坑我已经在文章中给出解决方案,其他的坑我相信同学们都能自行解决。

环境搭建好离真正的精通JVM还有很长很长很长的距离,openjdk可不是那么好学的。这边对jvm感兴趣的同学可以来听我讲课,在腾讯课堂搜索鲁班学院,即可跟我一起学习

广告

揭秘Java虚拟机:垃圾收集器和算法以及JVM面试题

cb8fef6966a356185cc1cc42cd036bf2.png
dab50c01cf5c1f7826a850df11f5f68d.png

如需要这些资料的同学可以关注我,后台私信【jvm】即可免费获取

如果你想深入学习JVM而又倍感压力,希望能更高效更透彻,我在鲁班学院等你。

意犹未尽,还想看子牙老师后续的文章?那就关注一波吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值