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

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

1.创建并编译代码

初次尝试java虚拟机调试-启动HSDB_第1张图片

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

初次尝试java虚拟机调试-启动HSDB_第2张图片

2.jdb调试代码并暂停

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

初次尝试java虚拟机调试-启动HSDB_第3张图片

3.使用jps查看java程序pid

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

wKioL1kR2k_ydex7AAAcPWAVt80472.png-wh_50

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

4.启动HSDB

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

初次尝试java虚拟机调试-启动HSDB_第4张图片

执行完这个命令之后我们的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号链接到进程

初次尝试java虚拟机调试-启动HSDB_第5张图片


初次尝试java虚拟机调试-启动HSDB_第6张图片


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