记一次有抽奖次数但是无法抽奖的问题

发布时间 2024-01-10 21:05:16作者: 有点懒惰的大青年

一、问题背景

测试那边现象是:登录手机银行打开抽奖活动界面,能查询到抽奖次数,但是点击抽奖提示:没有满足参与条件。

我查了一些日志,然后本地试是没有问题的。飞哥也一直在查日志。然后我找到原因是因为客群匹配时候,设置的cifGroupIdList是从登录中获取的。然后我就怀疑,是不是登录了很久之后断开了没有操作导致的?

不是。

我知道是登录的地方引起的,没有重新登录吗?但是登录接口一般不会频繁发起的,只需要登录一次就行了。

然后就去问测试的操作过程,磊说,他的操作是这样的:先建客群A,客群A无客户,再建活动,活动关联此客群A。用户登录之后去抽奖:报:没有参与条件。这是正常的,因为不在活动指定客群A中。然后测试在后管操作,将客户号导入到该客群A中后,再次进入抽奖页面,显示有抽奖次数了,但是点击抽奖,提示:无参与条件。

我不知道该怎么办了,因为代码看起来是毫无问题的。本地是复现不出来的。就是不知道其中登录的操作背后经历了什么。我想回去了,灰心丧气,觉得不好解决,不可能了。

 

二、解决过程

飞哥使用了一个办法,将本地的idea代码 jvm debug远程的测试电脑,本地代码和服务器代码一样,本地debug打上断点,然后使用测试的手机来操作,这样操作之后,调试代码进入本地,可以看到详细的代码运行过程了。

主要就是看登录接口的调用了。因为发现cifGroupIdList是从登陆接口中的user中获取的。断点打在login的方法中,看查询user的时候有没有重新去查cifGroupIdList。

终于,发现context.getUser()不为null,user不是空的,代码就不会去重新查询cifGroupIdList,取的还是以前的、缓存中的user中的cifGroupIdList,所以虽然重新客群导入了客户,但是从登陆接口中还是取的老的客群id,所以无法及时生效。

终于问题的原因找到了,顺藤摸瓜。我在这方面还是容易气馁,定位到了大概的原因和出处。但是没有恒心深研,发现真正的问题所在。行百里者半九十。其实主要原因还是自满自傲上,总是觉得自己的代码没问题,逻辑上没什么问题,也就觉得一定是测试操作的问题,手机银行客户端什么的,稀奇古怪的问题导致的。因为觉得不是自己的问题,不愿深研自己的原因,潜意识中就把原因怪责到其他事上上,找一个虚浮的,缥缈的原因替责。而不像飞哥这样,总是从自己身上找原因,有恒心有毅力,不断的专研,有着一步一个脚印的敦实的走,虽然慢,但是在大家无所事事觉得办不成,还要讥讽他人慢吞吞的找日志的时候,最后发现小丑是自己,飞哥成功的找到了原因,解决了问题。

 

三、IDEA的远程debug

1.点击Run/Debug Configurations, 添加Remote JVM Debug

2、参数:

Debugger mode: Attach to remote JVM

Transport:Socket

Host:10.0.81.6   是远程服务器上代码的ip地址

Port:5005    自己随便取

Use module classpath:  本地java启动类

3.将Command line arguments for remote JVM复制到远程电脑的配置jvm启动参数后面。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
JAVA_OPTS="-Xms1024m -Xmx1024m -Xss512k -XX:SurvivorRatio=8"
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LogFileName/gc.$DATE.log"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LogFileName/dump"
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dspring.profiles.active=$target -Dpisces.home=/pisces -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
nohup java -jar $JAVA_OPTS ../$projectName*.jar > $LogFileName/start.$applicationName.log 2>&1 &

4.远程服务器重新启动,可以看5005端口服务是否已启动:

netstat -an | grep 5005

服务启动好之后,就可以使用测试手机操作,本地断点查看了。

 

截图:

 

 

 

 

 

 

 

 

 

--