【alibaba/jvm-sandbox#01】debug源码的技巧

本文介绍了alibaba/jvm-sandbox,一个非侵入式的JVM运行期AOP解决方案,用于动态增强类和混沌实验。详细阐述了在mac系统上的环境配置和源码调试步骤,包括自定义模块的集成、远程调试目标应用以及使用sandbox挂载和执行模块。文章最后邀请读者关注作者的微信公众号【架构染色】进行深入交流。
摘要由CSDN通过智能技术生成

一、alibaba/jvm-sandbox 概述

alibaba/jvm-sandbox 是 JVM 沙箱容器,一种 JVM 的非侵入式运行期 AOP 解决方案。沙箱容器提供

  1. 动态增强类你所指定的类,获取你想要的参数和行信息甚至改变方法执行
  2. 动态可插拔容器框架

在其能力至上构建的上层应用有:

二、简述

2.1 系统环境

mac 系统 (windows 下还没弄清楚)

1)前置条件 :

  1. 自定义模块的 jar 包拷贝到 sandbox 运行时的自定义模块的目录下
  2. 自定义模块的源码作为一个模块,附加在 sandbox 的源码项目中

2)debug 模块和 sandbox 源码的步骤 :

  1. 开启远程调试模式 来 启动目标应用
  2. idea 中使用 sandbox 源码进行远程调试
  3. 在命令行执行 让 sandbox 挂载目标应用,并执行模块的功能.

三、源码调试

3.1、准备工作

1)把自定义模块,拷贝到 sandbox 的自定义模块的目录下 从官网上了解下sandbox 的目录结构.

cp /Users/kris/GitProject/jvm-sandbox/clock-tinker/target/clock-tinker-1.2.2-jar-with-dependencies.jar ~/.sandbox-module/
复制代码

2)自定义模块的源码作为一个模块,附加在 sandbox 的源码项目中 如果没有自定义模块就使用源码中的sandbox-debug-module模块 我的 demo 测试中,目标应用和自定义的模块都放到了 sandbox 的源码项目中.

3.2 开启远程调试

1)开启远程调试模式 来 启动目标应用

JDWP 远程调试技术 了解一下->JDWP 协议及实现

//cd 到可执行jar包的目录
cd /Users/kris/GitProject/jvm-sandbox/sandbox-demo/artifacts
// 启动jar 并开启jdwp监听.
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5050 -jar sandbox-demo.jar
//开启了监听,等待远程调试的链接.
Listening for transport dt_socket at address: 5050

复制代码

2)idea 中使用 sandbox 源码进行远程调试

如果目标进程的控制台出现 ***.jar中没有主清单属性的; 百度了解下 idea 打可执行的 Jar 包

3)在命令行执行 让 sandbox 挂载目标应用,并执行模块的功能

  1. 查看进程 id
jps -l
44178 org.jetbrains.idea.maven.server.RemoteMavenServer36
44164
55401 sun.tools.jps.Jps
55214 sandbox-demo.jar
复制代码
  1. 挂载并使用模块的功能
//cd 到sandbox 的安装目录
cd ~/.opt/sandbox/bin/

//pid 修改为 真实的目标进程id
./sandbox.sh -p 55214 -d 'broken-clock-tinker/repairCheckState'

./sandbox.sh -p pid -d 'broken-clock-modifier/modifyReportResultTo2'
复制代码

四、最后说一句

我是石页兄,如果这篇文章对您有帮助,或者有所启发的话,欢迎关注笔者的微信公众号【 架构染色 】进行交流和学习。您的支持是我坚持写作最大的动力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值