1、环境:ubuntu12.04+gcc 4.6.3
目前还没有在mac上编译成功过
2、下载openjdk
http://openjdk.java.net
3、安装JDK7所需要的依赖包
sudo apt-get build-dep openjdk-7
4、编译脚本,会在openjdk的build目录下生成三个版本的java程序
#!/bin/sh
#!/bin/bash
export LANG=C
export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386/
export ALLOW_DOWNLOADS=true #是否需要自动下载,jaxp,jaws可以自动下载
export SKIP_DEBUG_BUILD=false #是否跳过编译debug版
export SKIP_FASTDEBUG_BUILD=false #是否跳过编译fastdebug版
export DEBUG_NAME=debug
unset CLASSPATH
unset JAVA_HOME
make sanity && make all_debug
5、使用生成的debug版本进行调试,由于在运行过程中,需要使用dlopen动态加载libjvm.so,这个libjvm.so中缺少调试信息,所以无法跟进动态链接库中的符号,解决方案是生成libjvm的调试信息,方法如下
cd hotspot/make
export LANG=C
export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386/
export ALLOW_DOWNLOADS=true #是否需要自动下载,jaxp,jaws可以自动下载
export SKIP_DEBUG_BUILD=false #是否跳过编译debug版
export SKIP_FASTDEBUG_BUILD=false #是否跳过编译fastdebug版
export DEBUG_NAME=debug
unset CLASSPATH
unset JAVA_HOME
make all_debug
这种方法将会在 hotspot/build目录下生成linux/linux_i486_compiler2/jvmg,进行调试的时候,只需要使用./hotspot -gdb
6、如果在编译中有任何问题,可详细参考
http://blog.csdn.net/hengyunabc/article/details/16912775
http://blog.csdn.net/unei66/article/details/26481191