先决条件
首先在Ubuntu 18.04上编译SlowDebug版本的openjdk。注意,这里我选择的是x86处理器的电脑。苹果M系列属于ARM芯片,指令集不一样。由于我在苹果上进行垃圾回收调试的时候会报SIGILL错误。为了了解JVM的内部工作原理,不要在这种问题上过多纠结,另外,x86的资源也更丰富一些,因此,我直接选择x86处理器进行调试。
我机器的处理器为AMD Ryzen 7 8845HS w/ Radeon 780M Graphics 3.80 GHz
为了减少寻找在何处调试的时间,这里告诉大家,直接定位到
openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin
这里面就是JVM虚拟机可执行文件的入口。例如,平时大家执行的
java -version
就是调用这里的java可执行文件。如果你进入该文件夹,并执行当前文件夹下的
./java -version
能够正确显示版本号,则证明编译成功了。
工具选择
如果使用gcc和g++编译的openjdk,那么就选择gdb进行调试。前面已经说了,目标jdk是openjdk11,操作系统为Ubuntu 18.04,这里直接用apt install
安装gdb
即可进行调试。
为什么选用gdb而不是图形界面调试
为此问题我花了1个月,一直尝试看能否用IDE的调试工具进行调试,然