JamVM 开发调试环境搭建

1,636 阅读1分钟

JamVM is an open-source Java Virtual Machine that aims to support the latest version of the JVM specification, while at the same time being compact and easy to understand.

简单讲, JamVM 是使用 C 语言实现的精简版的 JVM. 作为入门虚拟机的项目比较适合. 下文用来搭建 JamVM 的开发调试环境, 为进一步分析实现打基础.

编译 JamVM

为方便起见, 个人在 Github 建了镜像, 由于原项目自2015年后便停止更新, 个人修改会直接推送到主分支.
以下为编译步骤, 假设用户为 macos 用户.
使用 vagrant 来管理虚拟机, 在虚拟机里编译.

宿主机操作

# 安装必要依赖
brew install vagrant
brew install virtualbox
brew install gdb

# 克隆项目
cd $HOME
git clone git@github.com:guxingke/jamvm.git

# 启动虚拟机
cd jamvm
vagrant up
// 如果初始化报错了, 执行  vagrant reload , 一般会成功.

虚拟机操作

进入虚拟机

vagrant ssh
# 正常情况下,会进入新的 shell.

虚拟机操作步骤


cd $HOME

# gnu classpath
wget 'https://ftp.gnu.org/gnu/classpath/classpath-0.99.tar.gz'
tar -xvf classpath-0.99.tar.gz
cd classpath-0.99/
export ANTLR_JAR=/usr/share/java/antlr4.jar
./configure --disable-gtk-peer --disable-gconf-peer --disable-plugin
make -i
sudo make -i install

# jamvm
cd /vagrant

./autogen.sh
./configure
make
sudo make install

# 验证
echo "public class HelloWorld { public static void main(String[] args) { System.out.println(\"Hello World\"); } }" > HelloWorld.java
javac HelloWorld.java
/usr/local/jamvm/bin/jamvm HelloWorld
# 输出 hello world 即正常编译

远程调试

本地使用 Clion 调试虚拟机内 JamVM.

远程调试效果

1583763248.png

实现步骤

虚拟机内使用 gdbserver 开启监听

gdbserver :1234 /usr/local/jamvm/bin/jamvm HelloWorld

Clion 配置 gdb remote debugger

1583763874.png

注意点1, gdb 不要使用 clion 自带的. 注意点2, localpath 改为项目根目录

开始调试

与正常 Debug 一致, 断点, next, step, continue.....

小结

记录了 macos 系统下 JamVM 的开发调试环境搭建. 如果是 linux 系统, 环境就更简单了, 不需要使用虚拟机了.

番外

个人记录, 如有错误遗漏之处, 请看官指出, 以修正.

参考