调试自定义module
- 首先参考官方的clock例子 写一个损坏的钟, 这个被称为被侵入程序
- 让被侵入程序能够通过idea启动
- 然后再写一个修复模块, 让修复模块能成功的修复被侵入程序, 打印出如下信息:
(从损坏状态, 变成修复状态,具体实现方式,可以参考上面例子中的官方文档 ) - 在被侵入程序的 Run/Debug Configurations 的 VM options 中添加如下参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5050
(如下图)
-
用idea重新启动被侵入程序(注意,用run而非debug)
-
将修复module(本例子中是BrokenClockTinkerModule)编译打包后复制到,用户module目录, 默认是~/.sandbox-module
-
增加远程调试配置
-Command line arguments for remote JVM 参数为:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5050
-
参数含义
transport:debugee与debuger调试时之间的通讯数据传输方式。
server:是否监听debuger的调试请求。
suspend:是否等待启动,也即设置是否在debuger调试链接建立后才启动debugee JVM。
address:debugee的地址,用于debuger建立调试链接。 -
在idea中启动远程调试程序(debug sandbox-module)
-
通过一下命令attach jvm 进程, 并attach被侵入程序
./sandbox.sh -p 6179
./sandbox.sh -p 6179 -d 'broken-clock-tinker/repairCheckState'
- 在idea中打断点
调试自定义 jvm-sanbox源码
- 在被侵入程序按照上述步骤启动完成后(即clock 配置debug参数, 并run ),下载jvm-sandbox源代码
- 配置如下命令
- 以debug方式启动jvm-sandbox源代码
- 使用一下命令激活trace-module
./sandbox.sh -p 46441 -a ‘debug-trace/trace’