debug技巧之使用Arthes调试

debug,arthes · 浏览次数 : 0

小编点评

**Arthes 简介** Arthes 是一个开源的 Java 调试工具,可以用于在线调试生产环境中的 Java 程序。它支持本地调试、远程调试和 Arthes 本身监控。 **本地调试和远程调试** *本地调试:开发人员可以使用 IDE 的调试功能来调试代码。 *远程调试:开发人员可以使用 IDE 的远程调试功能来调试远程运行的程序。 **Arthes 使用** 1. 安装 Arthes。 2. 启动 Arthes:使用 `curl` 命令下载并运行 `arthas-boot.jar`。 3. 启动代码:输入 `1` 并在 `arthes` 控制台中按下 `Enter`。 4. 观察入参和出参。 5. 使用 `watch` 命令监控方法执行路径上的每个节点上的耗时。 6. 使用 `monitor` 命令统计方法的平均耗时。 **其他功能** * 方法内部调用路径监控。 * 方法执行监控。 * 更多指令可从官网中获取。 **结论** Arthes 是一个方便且易用的 Java调试工具,可以帮助开发人员在线调试生产环境中的 Java 程序。

正文

一、前言

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。

前面我介绍了本地调试和远程调试,今天再加一种:利用Arthes进行调试。

二、Arthes是什么?

以下是Arthes官网原文:

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。
开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。
如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。
Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。

官网地址如下:Arthes

三、怎么使用arthes?

1. 安装arthes

下载arthas-boot.jar,然后用java -jar的方式启动:

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进行排查,如果实在是排查不出来,再使用远程调试。

与debug技巧之使用Arthes调试相似的内容:

debug技巧之使用Arthes调试

一、前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 前面我介绍了本地调试和远程调试,今天再加一种:利用Arthes进行调试。 二、Arthes是什么? 以下是Arthes官网原文: 通常,本

[转帖]gdb进阶调试技巧

https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作。基本的gdb操作就不在这里赘述了。 打印各种变量x 命令在gdb中可以使用x命令,来打印内存中的值。具体的格式是x/nfu addr。 含义为以f格

debug技巧之远程调试

一、前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 当我们的应用发布到线上之后,就不能随意启停了,但如果线上出现了BUG怎么办呢?大多数时候我们会借助线上打印的日志进行排查问题,如果幸运的话

debug技巧之本地调试

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。 如果看过我文章的同学应该知道我是一个Java开发,平时都是Spring全家桶。后端和前端虽说都是写代码,但调代码的时候还是有点不同的,前端可以con

顺应潮流,解放双手,让ChatGPT不废话直接帮忙编写可融入业务可运行的程序代码(Python3.10实现)

众所周知,ChatGPT可以帮助研发人员编写或者Debug程序代码,但是在执行过程中,ChatGPT会将程序代码的一些相关文字解释和代码段混合着返回,如此,研发人员还需要自己进行编辑和粘贴操作,效率上差强人意,本次我们试图将ChatGPT直接嵌入到代码业务中,让ChatGPT生成可以直接运行的代码。

我的日常AI使用

从去年年初开始,AI技术真正走入了我们的日常生活。从OpenAI到如今字节跳动的coze,我们通过AI大模型可以做很多事情,工具和平台众多,如何选择和使用有必要总结一下。 编程和debug方面 尽管gpt-4和gpt-4o确实很强,但对于持续代码改进和代码调试方面,依然不够好,并且它对于非Plus会

我又学会了使用Range实现网络文件下载的断点续传

目录前言1、Range请求头1.1、概述1.2、使用限制1.3、范围请求1.4、预防资源变更2、断点续传下载实现2.1、流程设计2.2、代码实现2.3、运行结果3、RandomAccessFile4、思维拓展参考资料 前言 在某次摸鱼的过程中,老大突然后面冒出来说要做一个拉取文件到本地的需求(写的时

Yolov8和Yolov10的差异以及后处理实现

Yolo模型可分为4个维度的概念 模型版本、数据集、模型变体(Variants)、动态/静态模型。 Yolo各模型版本进展历史 Yolov(2015年华盛顿大学的 Joseph Redmon 和 Ali Farhadi 发布)Yolov2(2016年Joseph Redmon发布)Yolov3(20

[转帖]打造自己的K8s debug image

https://cloud.tencent.com/developer/article/1932186?areaSource=&traceId= 生产上,有时候为了便于调试,会需要用到一些dig curl等工具,这里提供一个很好用的 docker image 集成了如下工具: tcpdump hto

[转帖]Redis SLOWLOG命令

https://deepinout.com/redis-cmd/redis-debug-cmd/redis-cmd-slowlog.html 文章目录 什么是 SLOWLOG 设置 SLOWLOG 查看 slow log 查看当前日志的数量 清空日志 Redis SLOWLOG命令 返回值 SLOW