SylixOS 应用移植指导——以Redis5.0.3为例(七)

tc666
tc666
tc666
8
文章
1
评论
2021年7月26日16:29:49 4 704

六、排错

1)redis-cli 换行问题

既然换行有问题,那就找redis-cli里换行的实现,即处理换行的函数,这里忽略怎么找的过程,全凭各自经验和排错习惯找,定位到linenoise.c里:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

这里是通过while 1获取输入字符的,处理的ENTER的值是13,这里我们加个打印排查一下这个问题:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

保存,编译,上传,运行,发现敲回车时的打印是:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

发现SylixOS下的ENTER对应的值是10,找到ENTER宏定义的位置,修改一下:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

保存编译上传,运行发现cli功能正常了,可以正确响应命令,别忘了把加的打印去掉。

2)INFO命令崩溃问题

继续验证,发现redis-cli里敲了info命令后,server崩了:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

SylixOS 应用移植指导——以Redis5.0.3为例(七)

这个打印就是SylixOS下程序崩溃出现的栈回溯,辅助我们定位问题的。栈回溯是由下而上一级级调用的,仔细观察,发现实际是崩溃在sdscatvprintf函数里,但实际这个函数并不能查出啥问题。只能对genRedisInfoString函数进行解剖,一段段加打印或者注释,定位问题。

最终定位问题在于%jd:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

redis希望通过%jd打印64位值,然而SylixOS编译器不认这玩意,导致后续的打印产生偏移,产生越界问题而崩溃。

全局搜索%jd,使用%lld替换即可:

SylixOS 应用移植指导——以Redis5.0.3为例(七)

其他还有一些地方,自行替换。

保存,编译,上传,运行验证,发现INFO命令不会导致崩溃。

SylixOS 应用移植指导——以Redis5.0.3为例(七)

tc666
  • 本文由 发表于 2021年7月26日16:29:49
  • 转载请务必保留本文链接:http://www.databusworld.cn/10433.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:4   其中:访客  3   博主  1
    • gewenbin gewenbin

      赵哥又回南京了啊 :cool:

        • tc666 tc666

          @ gewenbin 被客户赶回来了

          • qqq qqq 0

            @ gewenbin 你好,翼辉提供的redis503的aof重写失败怎么解决
            重写过程中
            Redis Client On Error: Error: read ECONNRESET Config right?

          • 你猜我是谁 你猜我是谁 4

            赵公子牛逼