当前位置:网站首页>Arthas 常用命令
Arthas 常用命令
2022-08-01 19:38:00 【猪悟道】
线上程序 在线调试工具:Arthas
Arthas 常用命令
1.查看源码:jad

2.清屏:cls

3.查看静态资源信息:getstatic
package com.demo.common;
import com.demo.entity.User;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/** * Description: 静态资源 * * @Author: * @Date: 2022-07-29 22:05 * @version: V1.0.0 */
@Component
public class DemoCommon {
private static Map<String, User> USER_MAP;
static {
USER_MAP = new HashMap<>();
USER_MAP.put("moon",new User("moon",18));
USER_MAP.put("starts",new User("starts",18));
USER_MAP.put("earth",new User("earth",18));
}
}

4.查看方法返回值:watch
## 1.发起请求
## http://127.0.0.1/test/query
## 2.如果只观察一次,则
watch com.demo.controller.Test query -n 1

5.查看方法耗时:trace
## 1.发起请求
## http://127.0.0.1/test/login
## 2.如果只观察一次,则
trace com.demo.service.impl.TestServiceImpl login
## 3.如果只观察异常耗时,则(毫秒),即耗时大于2500ms才打印
trace com.demo.service.impl.TestServiceImpl login '#cost > 2500'

线上调试(临时修改源码)
1.反编译为Java文件
## 1.命令
jad --source-only com.demo.controller.Test > C:\Users\Administrator\Desktop\source_code\Test.java

## 2.修改(Sublime)如果是在Linux系统,则可使用 VIM 命令

2.内存编译(在内存将源码编译为Class文件)
## 1.命令
mc C:\\Users\\Administrator\\Desktop\\source_code\\Test.java -d C:\\Users\\Administrator\\Desktop\\source_code\\

3.类增强
## 1.命令(修改方法返回值为 8 )
retransform C:\\Users\\Administrator\\Desktop\\source_code\\com\\demo\\controller\\Test.class
## 2.查看已增强的类(可重复执行1命令)
retransform -l
## 3.请求测试
## http://127.0.0.1/test/query
## 4.增强恢复,先清除增强类
retransform -d 1
retransform -d 2
## 5.重置
reset

测试结果
重置
重置后结果
reset 不生效,则在重置前执行一下其他命令,如:trace com.demo.controller.Test query
然后再执行reset即可

测试代码
用户
package com.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/** * Description: 用户 * * @Author: * @Date: 2022-07-29 21:17 * @version: V1.0.0 */
@Data
@AllArgsConstructor
public class User {
private String name;
private int age;
}
控制层
package com.demo.controller;
import com.demo.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** * Description: 测试 * * @Author: * @Date: 2022-07-25 23:30 * @version: V1.0.0 */
@CrossOrigin
@RestController
@RequestMapping("/test")
public class Test {
private TestService testService;
@Autowired
public Test(TestService testService){
this.testService = testService;
}
/** * 登录 */
@GetMapping("/login")
public void login(){
testService.login();
}
/** * 查询 * @return */
@GetMapping("/query")
public int query(){
return 0;
}
}
测试接口
package com.demo.service;
import com.demo.entity.User;
/** * Description: 测试服务 * * @Author: * @Date: 2022-07-29 21:16 * @version: V1.0.0 */
public interface TestService {
/** * 登录 * @return */
User login();
}
测试实现
package com.demo.service.impl;
import com.demo.entity.User;
import com.demo.service.TestService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/** * Description: 测试服务 * * @Author: * @Date: 2022-07-29 21:19 * @version: V1.0.0 */
@Slf4j
@Service
public class TestServiceImpl implements TestService {
@Override
public User login() {
checkUserCurrentAddress();
checkVerificationCode();
checkDynamicPass();
return new User("moon",1);
}
/** * 校验 用户当前属地 */
private void checkUserCurrentAddress(){
try {
Thread.sleep(400);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
log.info("Check User Current Address ...");
}
/** * 校验 验证码 */
private void checkVerificationCode(){
try {
Thread.sleep(800);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
log.info("Check Verification Code ...");
}
/** * 校验 密码 */
private void checkDynamicPass(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
log.info("Check Dynamic Pass ...");
}
}
静态资源
package com.demo.common;
import com.demo.entity.User;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/** * Description: 静态资源 * * @Author: * @Date: 2022-07-29 22:05 * @version: V1.0.0 */
@Component
public class DemoCommon {
private static Map<String, User> USER_MAP;
static {
USER_MAP = new HashMap<>();
USER_MAP.put("moon",new User("moon",18));
USER_MAP.put("starts",new User("starts",18));
USER_MAP.put("earth",new User("earth",18));
}
}
边栏推荐
- 工作5年,测试用例都设计不好?来看看大神的用例设计总结
- 如何写一个vim插件?
- Ruijie switch basic configuration
- DAO开发教程【WEB3.0】
- Win11怎么安装语音包?Win11语音包安装教程
- nacos安装与配置
- 腾讯云主机安全 x 轻量应用服务器|强强联合主机安全普惠版重磅发布
- Ha ha!A print function, quite good at playing!
- 网络不通?服务丢包?这篇 TCP 连接状态详解及故障排查,收好了~
- 58: Chapter 5: Develop admin management services: 11: Develop [admin face login, interface]; (not measured) (using Ali AI face recognition) (demonstrated, using RestTemplate to implement interface cal
猜你喜欢

在全志V853开发板试编译QT测试

Website construction process
![DAO development tutorial [WEB3.0]](/img/fa/4406317241973d15d776c4f2f0890d.png)
DAO development tutorial [WEB3.0]

正则表达式

Oracle排序某个字段, 如果这个varchar2类型的字段有数字也有文字 , 怎么按照数字大小排序?

Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案

为什么限制了Oracle的SGA和PGA,OS仍然会用到SWAP?

From ordinary advanced to excellent test/development programmer, all the way through

PanGu-Coder:函数级的代码生成模型

regular expression
随机推荐
How to query database configuration parameters in GBase 8c, such as datestyle.What function or syntax to use?
BN BatchNorm + BatchNorm的替代新方法KNConvNets
Keras deep learning practice - traffic sign recognition
PanGu-Coder:函数级的代码生成模型
使用常见问题解答软件的好处有哪些?
文库网站建设源码分享
网络不通?服务丢包?这篇 TCP 连接状态详解及故障排查,收好了~
An implementation of an ordered doubly linked list.
TestNG multiple xml for automated testing
在GBase 8c数据库后台,使用什么样的命令来对gtm、dn节点进行主备切换的操作?
MySQL开发技巧——存储过程
Creo5.0 rough hexagon is how to draw
MLX90640 红外热成像仪测温模块开发笔记(完整篇)
Pytorch模型训练实用教程学习笔记:三、损失函数汇总
kubernetes-部署nfs存储类
OSPO 五阶段成熟度模型解析
【服务器数据恢复】服务器Raid5阵列mdisk组中多块磁盘离线的数据恢复案例
Selenium在远程中的截图
Every calculation, & say what mean
即时通讯开发移动端弱网络优化方法总结