自从进了私有化项目组,代码产出越来越少,看别人代码越来越多。后来才发现代码调试可以本地Debug简直是种奢侈,线上的问题就不得不使用Arthas了。
我使用arthas的场景:1.监听一个方法的入参,返回值。2.class文件反编译。主要是第一点。
下面就简单介绍下怎么使用吧。
1. 安装
curl -O https://arthas.aliyun.com/arthas-boot.jar
2.启动
java -jar arthas-boot.jar
输入你需要调试的服务的序列号
进入到了arthas控制台
3.Arthas指令
监听一个方法为例:
watch cn.yr.blog.controller.web.WebArticleController getArticleById '{params,returnObj,throwExp}' -n 5 -x 3
- watch:监听命令
- cn.yr.blog.controller.web.WebArticleController:类全路径
- getArticleById :方法名
- '{params,returnObj,throwExp}':代表要监听 入参,返回值,异常信息
- -n 5 :监听5次 方法执行次数超过5次后退出
- -x 3 :参数的打印深度 如果参数比较复杂,包裹层级较多,如果想看得详细就改大些。
这里强烈推荐一个IDEA的插件:arthas idea
可以一键生成arthas指令:在需要调试的方法名上右键->Arthas Command -> watch
接下来演示反编译:
在修改bug后,重新部署中,有时候不确定是否代码时候正确更新。就可以反编译看看线上代码是否正确。
jad cn.yr.blog.controller.web.WebArticleController
jad + 类路径即可
4. 总结
Arthas确实为线上调试提供了很大的便利,但也有些不足,比如不能监听到方法内部成员变量的值。
Arthas的功能远不如此,文档在此:https://arthas.aliyun.com/doc
阿里巴巴开源的,中文文档读起来还是挺舒服的。
评论