一:背景
1. 讲故事
记得在很久之前给初学的朋友们录制 redis 视频课程,当时结合了不少源码进行解读,自以为讲的还算可以,但还是有一个非常核心的点没被分享到,那就是源码级调试,
对,读源码还远远不够,还得亲自实操,为了弥补这个遗憾,这一篇就补起来哈。
二:vscode 和 redis 的部署
1. 平台和调试工具
大家都知道 官方版redis 是不支持 windows 的,即使被微软开源技术社区移植到了 windows 平台,版本滞后就不说了,无数潜在的 bug 可能会让你望而却步,gitbub地址:https://github.com/microsoftarchive/redis 目前最新的版本是 3.0.5, 官方都已经是 6.0.9 啦! 😮
扯这么多的意思就是想说不要指望用 windows + visualstudio 调试源码,更何况这里还要调试最新版的 redis6, 只能上 centos + vscode 了哈 🤭🤭🤭
2. vscode 在 centos 上的安装
- 官方地址下载 vscode,这里我用的版本是 1.23,参考网址: https://code.visualstudio.com/updates/v1_23
[root@localhost data]# wget https://vscode.cdn.azure.cn/stable/d0182c3417d225529c6d5ad24b7572815d0de9ac/code-1.23.1-1525968555.el7.x86_64.rpm--2020-10-27 07:03:08-- https://vscode.cdn.azure.cn/stable/d0182c3417d225529c6d5ad24b7572815d0de9ac/code-1.23.1-1525968555.el7.x86_64.rpmResolving vscode.cdn.azure.cn (vscode.cdn.azure.cn)... 119.39.80.117, 14.204.144.133, 153.37.238.225, ...Connecting to vscode.cdn.azure.cn (vscode.cdn.azure.cn)|119.39.80.117|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 69499838 (66M) [application/x-redhat-package-manager]Saving to: 'code-1.23.1-1525968555.el7.x86_64.rpm'100%[===================================================================================================================>] 69,499,838 3.36MB/s in 19s 2020-10-27 07:03:28 (3.40 MB/s) - 'code-1.23.1-1525968555.el7.x86_64.rpm' saved [69499838/69499838]
- 安装 vscode 的依赖包 libXScrnSaver, nss
[root@localhost code]# yum install libXScrnSaver-devel.x86_64 libXScrnSaver.x86_64 && yum install nss
- rpm 安装 vscode
[root@localhost data]# rpm -ivh code-1.23.1-1525968555.el7.x86_64.rpmPreparing... ################################# [100%]Updating / installing... 1:code-1.23.1-1525968555.el7 ################################# [100%]
安装完后就可以在 centos 上找到 vscode 的启动图标了,🐂🙅🐂。
3. redis6 源码下载
这里有一个坑要提醒一下,如果你编译 redis6 的话,centos7 的 gcc 默认是 4.8.5,你需要升级一下:
[root@localhost redis-6.0.9]# gcc -vgcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) [root@localhost ~]# yum -y install centos-release-scl[root@localhost ~]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils[root@localhost ~]# source /opt/rh/devtoolset-9/enable[root@localhost redis-6.0.9]# gcc -vgcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
然后就可以源码下载,编译,启动,直接参考官方文档来: https://redis.io/download
$ wget https://download.redis.io/releases/redis-6.0.9.tar.gz$ tar xzf redis-6.0.9.tar.gz$ cd redis-6.0.9$ make$ src/redis-server
没什么好说的,执行完后的启动界面如下:
三: vscode 调试 redis
1. 使用 vscode 安装 c/c++ 扩展
具体用法和 windows 上的 vscode 差不多,该怎么装还怎么装。
2. 使用 debug 生成 launch.json 启动文件
菜单栏 "Debug" -> "Starting Debug",然后选择 "C++ (GDB/LLDB)",如下图:
再配置一下启动文件 .vscode/launch.json
,将 ${workspaceFolder}/src/redis-server
程序的路径配置在 program 节点下,如下代码所示:
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/src/redis-server", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ]}
3. 生成编译指令文件 tasks.json
在 .vscode 目录下新建 tasks.json,使用 make 命令编译 redis 源码,最后由 launch.json 读取生成好的 可执行文件 redis-server,代码如下:
{ "version": "2.0.0", "tasks": [{ "label": "Build", "type": "shell", "command": "make", "args": [ "CFLAGS=\"-g -O0\"" ] }]}
4. 调试执行
在 server.c 中找到 main 启动函数,下一个断点过去,按 F5 执行,如下图可以看到断点已命中。
为了更加逼真一点,我在 string.c 中的 setCommand 处设置断点,保证 redis-cli 在执行 set username jack
时断点命中。
- client 端
[root@localhost src]# ./redis-cli127.0.0.1:6379> set username jack
- server 端
怎么样,图中左侧面板中的 局部变量窗口,监控窗口,调用堆栈窗口,一目了然。。。
四:总结
总的来说,整个搭建过程有一定的繁琐度,但学啥又简单呢? 再说源码都没调试过,怎么能说熟悉 redis 呢?最后祝大家有一个开心的 redis 调试之旅!
更多高质量干货:参见我的 GitHub: dotnetfly
原文转载:http://www.shaoqun.com/a/484480.html
heap:https://www.ikjzd.com/w/2012
夸克:https://www.ikjzd.com/w/1237
prime day:https://www.ikjzd.com/w/131
一:背景1.讲故事记得在很久之前给初学的朋友们录制redis视频课程,当时结合了不少源码进行解读,自以为讲的还算可以,但还是有一个非常核心的点没被分享到,那就是源码级调试,对,读源码还远远不够,还得亲自实操,为了弥补这个遗憾,这一篇就补起来哈。二:vscode和redis的部署1.平台和调试工具大家都知道官方版redis是不支持windows的,即使被微软开源技术社区移植到了windows平台,版
亚马逊全球开店:https://www.ikjzd.com/w/1299
邮乐网:https://www.ikjzd.com/w/1776
哭了,变体违规被关店?你一定不知道变体这样用才合规!:https://www.ikjzd.com/home/96826
2020新疆伊犁旅游攻略(全):http://tour.shaoqun.com/a/18481.html
2020十一去哪旅游人少便宜 国庆节冷门消费不高的景点:http://tour.shaoqun.com/a/75282.html
No comments:
Post a Comment