Closed Ruomenger closed 11 months ago
最近工作上事比较多,可能没有时间搞这个事情 😭 欢迎 MR 😃
之前发现在 go 1.21 下 TestTimePatch 测试用例会 panic,也是没功夫处理。
go test -gcflags=-l -run TestTimePatch
最近工作上事比较多,可能没有时间搞这个事情 😭 欢迎 MR 😃
之前发现在 go 1.21 下 TestTimePatch 测试用例会 panic,也是没功夫处理。
go test -gcflags=-l -run TestTimePatch
好的,我会抽时间看下这个问题(指的是mock失败这个问题,panic的这个问题有时间也会看下)。目前简单修改判断条件为RAX和RBX可以解决但是不确定是否能彻底解决这个问题
最近工作上事比较多,可能没有时间搞这个事情 😭 欢迎 MR 😃
之前发现在 go 1.21 下 TestTimePatch 测试用例会 panic,也是没功夫处理。
go test -gcflags=-l -run TestTimePatch
这个TestTimePatch的问题是test时使用的参数不对所致的,应该使用下面的参数(其实-gcflags='all=-N'
就足够了)禁止所有包的内联和优化即可
go test -gcflags='all=-N -l' -v -count=1 -run TestTimePatch
参考链接:
env
problem
使用go1.21.1和go1.20.8编译(编译命令禁止了内联和优化
go build -gcflags '-N -l' -o generic-go1.21.1
)运行examples中的generic时报错,使用go1.18.8和go1.19.8编译后执行可以正常输出结果为2。error:
generic.go代码
问题分析
明确了问题出现的场景及看了
getFirstCallFunc
的实现后,我用gdb对go1.18.8编译出的generic-go1.18.8和go1.21.1编译出的generic-go1.21.1进行了调试go1.18.8反编译如下所示:
go1.21.1反编译如下所示:![image](https://github.com/go-kiss/monkey/assets/23385044/0bd61524-31f7-4e26-8f68-89deb4cbcdc8)
而在
getFirstCallFunc
中的判断逻辑是要求call指令的上一条指令使用RAX寄存器所以问题应该出现在这里,我将这里的判断逻辑修改为使用RAX或RBX寄存器后可以正常执行了,但是还不确定go1.20进行了什么改动导致的这一问题