文章目录
- 一、基础准备-被测应用
- 二、代码编写-自定义Module
- 三、jvm-sandbox安装及基础命令
- 四、jvm-sandbox demo演示
- 4.1、改变方法返回
- 4.2、异常注入
- 五、资源链接
一、基础准备-被测应用
准备:先创建一个基础的SpringBoot项目并打jar包后在服务器启动

@RestController
public class MyController {
@GetMapping("/index")
public String index() {
return "SANDBOX TEST";
}
@GetMapping("/test")
public String test() {
try{
calce();
}catch (Exception e){
return "Has Error";
}
return "No Error";
}
public String calce(){
return "";
}
}
预览: 访问接口返回结果如下


二、代码编写-自定义Module
maven依赖:创建一个正常的maven项目,在依赖pom.xml文件中添加sandbox的父级依赖。
<parent>
<groupId>com.alibaba.jvm.sandbox</groupId>
<artifactId>sandbox-module-starter</artifactId>
<version>1.2.0</version>
</parent>
代码编写:实现一个简单改变方法返回值的功能,并打包成jar包待后面使用。
@MetaInfServices(Module.class)
@Information(id = "change-resp")
public class Demo implements Module {
private final static String CLASS_NAME = "com.onetester.springbootdemo.MyController";
private final static String METHOD_NAME = "index";
@Resource
private ModuleEventWatcher moduleEventWatcher;
@Command("changeResp")
public void changeResp(){
new EventWatchBuilder(moduleEventWatcher).onClass(CLASS_NAME).onBehavior(METHOD_NAME).onWatch(new AdviceListener(){
protected void afterReturning(Advice advice) throws Throwable {
ProcessController.returnImmediately(advice.getReturnObj() +": now changed");
}
});
}
}

三、jvm-sandbox安装及基础命令
下载及安装:
-- 下载
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip
-- 解压
unzip sandbox-stable-bin.zip

相关命令:
| 命令 | 作用 |
|---|---|
| ./sandbox.sh -p pid | 挂载sandbox到指定进程 |
| ../sandbox.sh -p pid 'xxxx' | 执行对应的指令 xxx这里代表指令 |
| ./sandbox.sh -p pid -S | 停止挂载 |
| ./sandbox.sh -p pid -R | 重新挂载 |
| ./sandbox.sh -p 8043 -l | 显示挂载的module |
四、jvm-sandbox demo演示
4.1、改变方法返回
上传jar包:将前面自定义写的一个Module打包jar包后上传到sandbox-module目录下

查看端口:使用jps -ml命令查看启动的java项目进程

挂载模块并执行命令

查看结果

4.2、异常注入
异常注入:sandbox官方提供了基础的方法异常的代码,可见源码中的DebugRalphModule类,且对应jar包在下载中的example目录下。

启动模块:将example目录下的sandbox-debug-module.jar文件复制到sandbox-module目录下,并确认挂载的模块存在即可

注入异常: 给calce注入异常,并使其返回异常,从/test接口返回结果即可看出是否有异常。
./sandbox.sh -p 8043 -d 'debug-ralph/wreck?class=com.onetester.springbootdemo.MyController&method=calce&type=IOException'


五、资源链接
文章中相关代码demo




















