字数 | 1700 |
阅读时间 | 8 分钟 |
阅读人群 | 后端开发 |
idea的远程调试(不常用)
描述
开启 idea 的远程调试,将线上的请求拦截到本地 idea 开启的服务
开启步骤
-
在idea工具中添加 remote 调试
-
输入要远程调试的主机的 host 和 服务开放的端口号 Port (这个端口好不是服务本身的端口号,而是后面用参数指定的端口号)
-
要用指定的命令启动远程服务器上的服务 (address 就是 上文的 Port) java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6001 deploy-tool.jar
开源的Java诊断工具--Arthas 基本使用
Arthas 命令
# 查看某个方法对应的入参和返回值
# 如果params 是一个数组,但是打印 params 的时候并没有把具体内容打印出来,这个时候可以使用 -x 2 来指定打印对象的属性遍历深度。
watch com.zarek.controller testMethod '{params,returnObj}' -x 4
windows 通过浏览器远程访问 Arthas (使用 tunnel 方式)
arthas.aliyun.com/doc/tunnel.…
常用 Arthas 命令
# 查看返回值和入参等
watch com.dahua.smc.cloud.business.controller.EventInfoController selectCountByEventLevel '{params,returnObj,throwExp}' -n 5 -x 3
# 查看调用链路
trace com.dahua.smc.cloud.business.controller.EventInfoController selectCountByEventLevel -n 5
--skipJDKMethod false
# class文件热加载
# 用于查找项目中所有的EventInfoController类的实例。这里的`*`符号表示通配符,表示查找所有的类。`-d`选项表示输出类的详细信息,包括类名、包名、状态等。
sc -d *EventInfoController
# 这里的 `524d6d96` 是一个类md5值的十六进制表示,用于唯一标识该类。`/opt/EventInfoController.class` 是该类字节码文件的路径。`-c`选项表示使用指定的md5值进行类定义替换。
redefine -c 524d6d96 /opt/EventInfoController.class
# 上面两个命令组合可以动态地修改 EventInfoController 类的功能,例如修改方法实现、添加新的方法
踩坑点
- windows 使用 webconsole 方式连接 Arthas的时候要确保本机电脑安装了的 telnet 服务端