• 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));
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

    4.查看方法返回值:watch

    ## 1.发起请求
    ## http://127.0.0.1/test/query
    ## 2.如果只观察一次,则
    watch com.demo.controller.Test  query -n 1
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    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
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    线上调试(临时修改源码)

    1.反编译为Java文件

    ## 1.命令
    jad --source-only com.demo.controller.Test > C:\Users\Administrator\Desktop\source_code\Test.java
    
    • 1
    • 2

    在这里插入图片描述

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

    在这里插入图片描述

    2.内存编译(在内存将源码编译为Class文件)

    ## 1.命令
    mc C:\\Users\\Administrator\\Desktop\\source_code\\Test.java -d C:\\Users\\Administrator\\Desktop\\source_code\\
    
    • 1
    • 2

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    测试结果
    在这里插入图片描述
    重置
    在这里插入图片描述
    重置后结果

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

    在这里插入图片描述

    测试代码

    用户

    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;
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    控制层

    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;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    测试接口

    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();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    测试实现

    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 ...");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    静态资源

    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));
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    金仓KFS数据级联场景部署
    反渗透,sql注入漏洞扫描工具
    Docker下如何构建包含延迟插件的RabbitMQ镜像
    力扣动态规划--数组中找几个数的思路
    前端人70%以上 不了解的this指向
    前端小白是如何利用chatgt用一周时间从做一款微信小程序的
    图形预处理工具_CogAffineTransformTool
    从github上下载下来的代码下载依赖提示: An unknown git error occurred
    各扫描方法原理及特点总结
    x64内核实验5-API进0环
  • 原文地址:https://blog.csdn.net/weixin_42176639/article/details/126064682