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