六、排错
1)redis-cli 换行问题
既然换行有问题,那就找redis-cli里换行的实现,即处理换行的函数,这里忽略怎么找的过程,全凭各自经验和排错习惯找,定位到linenoise.c里:
这里是通过while 1获取输入字符的,处理的ENTER的值是13,这里我们加个打印排查一下这个问题:
保存,编译,上传,运行,发现敲回车时的打印是:
发现SylixOS下的ENTER对应的值是10,找到ENTER宏定义的位置,修改一下:
保存编译上传,运行发现cli功能正常了,可以正确响应命令,别忘了把加的打印去掉。
2)INFO命令崩溃问题
继续验证,发现redis-cli里敲了info命令后,server崩了:
这个打印就是SylixOS下程序崩溃出现的栈回溯,辅助我们定位问题的。栈回溯是由下而上一级级调用的,仔细观察,发现实际是崩溃在sdscatvprintf函数里,但实际这个函数并不能查出啥问题。只能对genRedisInfoString函数进行解剖,一段段加打印或者注释,定位问题。
最终定位问题在于%jd:
redis希望通过%jd打印64位值,然而SylixOS编译器不认这玩意,导致后续的打印产生偏移,产生越界问题而崩溃。
全局搜索%jd,使用%lld替换即可:
其他还有一些地方,自行替换。
保存,编译,上传,运行验证,发现INFO命令不会导致崩溃。
2021年7月27日 09:59 1F
赵哥又回南京了啊
2021年7月28日 15:54 B1
@ gewenbin 被客户赶回来了
2023年10月26日 14:59 B1
@ gewenbin 你好,翼辉提供的redis503的aof重写失败怎么解决
重写过程中
Redis Client On Error: Error: read ECONNRESET Config right?
2023年11月8日 15:01 2F
赵公子牛逼