一、前言
大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。
前面我介绍了本地调试和远程调试,今天再加一种:利用Arthes进行调试。
二、Arthes是什么?
以下是Arthes官网原文:
通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。
开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。
如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。
Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。
官网地址如下:Arthes
三、怎么使用arthes?
1. 安装arthes
下载arthas-boot.jar,然后用java -jar的方式启动:
java
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
启动之后,如下
它这里会将正在运行的Java进程打印出来,我们输入"1"按下"enter"就可以进入调试界面了
2. 一些基础命令
(1)反编译java类
命令格式:jad 包路径+类名
这个命令可以将线上的class文件反编译回来,保证线下线上的代码是同一套。
(2)函数执行数据观测
生成这个指令Arthes有自己的一套规则,但是自己去拼实在是太麻烦了。下面介绍一个IDEA插件,如果你的开发工具是idea,那么可以去插件市场搜索Arthes,非常方便。
安装之后,打开编辑器,选中方法名,右键打开工具条
这样就会生成一条监测命令,粘贴到刚才的Arthes控制台即可,调用一下该方法,就可以看到出入参数了,非常的便捷好用。
watch指令我使用的最多,多用于调试功能,用来看入参和出参。
(3)方法内部调用路径,并输出方法路径上的每个节点上耗时
使用idea插件生成方法的trace命令,贴到arthes控制台,如下:
trace命令可以用来排查错误发生在哪一行,或者在优化代码的时候分析哪些方法耗时多。
(4)方法执行监控
monitor命令一般用于统计方法的平均耗时。
还有很多其他指令我就不当官网文档的搬运工了,感兴趣可以去官网看。
四、小结一下
这个组件是免费开源的,真的非常好用,在排查线上BUG的时候,我会先尝试使用Arthes进行排查,如果实在是排查不出来,再使用远程调试。