jvm调试工具arthas的watch命令记录函数参数和返回值案例

最近在一个项目在客户生产环境版本升级后,出现了预期之外的错误,由于客户升级的版本不是最新版本,是一个稍早一点的版本,时间已经是两年以前的了,对应的源码也很难找到和确认。另外,客户升级以前的版本对应功能也是正常的。

1. 在测试环境部署客户升级版本环境

为了查找问题原因,使用客户的升级版本,部署了环境。

2. 根据业务逻辑查找关键代码类和方法

虽然具体的版本不清楚,但是总体的业务处理流程应该是一致的,根据最新的代码和业务逻辑处理,找到关键的类和方法:

com.xx.yyy.business.handler.BaseHandlerImpl
getPwdSplit

3. 运行arthas,挂载到对应的java进程

这里需要注意的是,如果java进程不是root启动的,arthas需要和目标java进程使用相同的用户名启动,才能挂载成功。

4. 运行watch命令,观察入参和返回值

在arthas挂载成功的情况下,执行下面的命令:

[arthas@58938]$ watch com.xx.yyy.business.handler.BaseHandlerImpl getPwdSplit -b -s -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 13 , method count: 1) cost in 218 ms, listenerId: 3
method=com.xx.yyy.business.handler.BaseHandlerImpl.getPwdSplit location=AtEnter
ts=2024-03-10 11:41:53; [cost=0.032532ms] result=@ArrayList[
    @Object[][
        @ThirdAuthInfo[com.xx.yyy.business.entity.thirdauth.ThirdAuthInfo@29d4b0c],
        @String[1234test1234],
        @UserInfo[com.xx.yyy.business.entity.user.UserInfo@27bda07c],
        @ArrayList[isEmpty=true;size=0],
    ],
    @AuthService[
        log=@Logger[org.apache.log4j.Logger@e057bf3],
        enabled_jdbc&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值