本人最近正在学习java虚拟机,而HSDB是学习java虚拟机的必经之路,于是今天尝试下了HSDB的调试。

    首先借鉴了知乎大牛R大的文章:   借HSDB来探索HotSpot VM的运行时数据,而本文章的意义在于帮助和我一样想学习java虚拟机但平时过于依赖ide的同学。我的环境是JDK8。废话不多说了,直接上图。

1.创建并编译代码

wKiom1kR1MaTgcXmAAAcnGehB7s338.png-wh_50

由于平时使用eclipse,如果没有配好path、javahome和classpath要首先配好,然后cmd进入工程目录下,我的package是hsdb,需要进入到hsdb的上级目录下,执行编译:

wKioL1kR11DyTEumAAAnrRx-WxE775.png-wh_50

2.jdb调试代码并暂停

ps:jdb,jps和sa-jdi.jar都在jdk lib和bin目录下

wKioL1kR2GfzmZr_AABLrjSXStM844.png-wh_50

3.使用jps查看java程序pid

上图的cmd窗口保留不动,重新打开一个新的cmd窗口,使用jps查看java程序的进程号并执行后续的HSDB启动操作

wKioL1kR2k_ydex7AAAcPWAVt80472.png-wh_50

图中我们可以看到Main的pid是18392.

4.启动HSDB

注意:我们大多的java装在了C:\Program Files下路 这个完整classpath路径需要用双引号转义一下,如下图:

wKioL1kR283z3louAAAo5aj3P_k669.png-wh_50

执行完这个命令之后我们的HSDB工具就应该启动了。但是我启动的时候报了一个错误:Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: Can't load library: D:\Program Files\Java\XXX\sawindbg.dll.参照如下文章进行了解决 HSDB时,关于解决UnsatisfiedLinkError sawindbg.dll的问题笔记

然后我们就可以用pid号链接到进程

wKioL1kR3lTyogn8AABWDv4J4hE922.png-wh_50


wKioL1kR3sqCWrIzAACNRSoytDs064.png-wh_50

wKiom1kR30jyJAAlAABub4kFvjM688.png-wh_50


至此,我们HSDB工具已经连接到我们的java进程中,可以进行进一步的调试了。本文章意在帮助第一次使用HSDB调试的同学爬坑,并给自己做个笔记。