上周五偶然翻到本讲JVM原理的书,看着觉得很过瘾,居然因此错过了晚饭,很久没这么酣畅淋漓过了。然而过瘾之余,看不到JVM源码、也无法调试,总觉得未能尽兴。Linux的老爸Linus大牛曾说“Talk is cheap, show me the code”,光看书,总觉得像在吃别人已经吃剩下的饭,远不如自己动手看看源码、调试跟一跟来得实在。遂决定在Windows平台上自己动手编译一个Java虚拟机,并且要求能调试。
本文详细记录了Windows平台下使用VS2010编译x86版本的Java虚拟机客户端的全过程。包括编译前的准备工作、配置与编译过程与错误排除、将Hotspot VM源码导入VS2010 IDE实现图形界面管理,并在其中下断点调试的整个过程。
安装VS2010及SP1补丁
OpenJDK官方使用VS2010构建Windows平台下的JVM和JDK,并且在其配置脚本中也有一些针对VS2010“硬编码”的内容,如捕捉其编译器的版本信息。为了保证兼容性和编译的方便性,我们也入乡随俗,使用VS2010。
值得注意的是,为了顺利编译VS2010,需要为VS2010安装SP1补丁。之后最好再通过Windows的更新系统将所有VS2010相关的补丁打齐,然后开始编译。我安装的是VS2010中文版,在之后的编译过程中要改一些配置(OpenJDK的配置脚本对中文支持不好),因此如果直接安装英文版的VS2010,编译过程会更顺利些。
图中正在给VS2010打补丁。从安装VS2010再到安装VS2010 SP1补丁包,然后在线更新补丁,耗时会比较长,这段时间可以并行下面的操作。
安装Cygwin
由于OpenJDK在配置阶段使用了bash脚本和一些gnu工具集,要想在Windows系统中完成这些步骤,就需要Cygwin的帮助了。访问https://www.cygwin.com/网站,下载对应的Cygwin版本。由于我的开发环境是Win2k8 R2,于是下载了x64版本的。
Cygwin的安装比较傻瓜化,其中有一步是选择镜像,我选择的是kernel.org的镜像,速度还行。接下来是定制需要安装的工具,在默认的基础上,我们加装如下工具:
Binary Name Category Package Description
================================================================
ar.exe Devel binutils The GNU assembler, linker and binary utilities
make.exe Devel make The GNU version of the 'make' utility built for CYGWIN
m4.exe Interpreters m4 GNU implementation of the traditional Unix macro processor
cpio.exe Utils cpio A program to manage archives of files
zip.exe Archive zip Package and compress (archive) files
unzip.exe Archive unzip Extract compressed files in a ZIP archive
free.exe System procps Display amount of free and used memory in the system
================================================================
选定工具后就是漫长的等待下载过程了。