一:背景

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.rpm
Resolving 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 OK
Length: 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.rpm
Preparing...                          ################################# [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 -v
gcc 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 -v
gcc 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-cli
127.0.0.1:6379> set username jack
  • server 端

怎么样,图中左侧面板中的 局部变量窗口,监控窗口,调用堆栈窗口,一目了然。。。

四:总结

总的来说,整个搭建过程有一定的繁琐度,但学啥又简单呢?再说源码都没调试过,怎么能说熟悉 redis 呢?最后祝大家有一个开心的 redis 调试之旅!

源码都没调试过,怎么能说熟悉 redis 呢?相关推荐

  1. android面试 源码,Android面试题-onCreate源码都没看过,怎好意思说自己做android-Go语言中文社区...

    自定义控件 联网 工具 数据库 源码分析相关面试题 Activity相关面试题 Service相关面试题 与XMPP相关面试题 与性能优化相关面试题 与登录相关面试题 与开发相关面试题 与人事相关面试 ...

  2. 连Spring源码都没看过,你怎么敢在简历上写“精通”?

    小A 你好面试官,非常高兴能参加今天的面试 面试官 没事,先做一个自我介绍吧 小A 我叫小A,工作三年了,做过...... 面试官 嗯,好的,看到你的项目这块,在公司主要用的就是spring全家桶相关 ...

  3. 为了彻底搞懂 hashCode,我连 JDK 的源码都没放过(建议收藏)

    今天我们来谈谈 Java 中的 hashCode() 方法--通过源码的角度.众所周知,Java 是一门面向对象的编程语言,所有的类都会默认继承自 Object 类,而 Object 的中文意思就是& ...

  4. 连这几个源码都没啃透,那面试高级开发的事等等再来!

    前不久参加了一个线上技术交流会,有三四十岁的技术管理者,当然也有刚刚进入程序员行业的新手.全程的讨论都很热烈,其中有这样一个问题,"新技术层出不穷,而作为处在旋涡中心的程序员该如何应对?&q ...

  5. 下载安卓源码都干了什么?

    闲来无事,想瞅瞅安卓wifi的框架是什么样子滴,就有了如下的记录 目录 1.准备linux系统 2.创建samba共享目录 4.下载源码 5.下载repo 6.同步代码 7.完成同步,开始阅读 1.准 ...

  6. android 仿网易新闻客户端源码都有

    原文:android 仿网易新闻客户端源码都有 android 仿网易新闻服务端源码 源代码下载地址: http://www.zuidaima.com/share/1550463560944640.h ...

  7. 免费开源!新学期必收藏的AI学习资源,从课件、工具到源码都齐了

    (图片付费下载于视觉中国) 整理 | Jane 出品 | AI科技大本营(ID:rgznai100) 2019 年 3 月 28 日,教育部公布了 2018 年度普通高等学校本科专业备案和审批结果,共 ...

  8. 起飞,会了这4个 Intellij IDEA 调试魔法,阅读源码都简单了

    前言 上一篇文章 IntelliJ IDEA 高级调试之Stream Trace 算是 IntelliJ IDEA 高级调试技巧的开胃菜,很多小伙伴被这个小技巧征服.趁热打铁,今天给大家带来几个我日常 ...

  9. 面试了10几家公司后被怼,逼的我把源码都吃透了,最终成功入职阿里

    从三月底开始投递简历,甭管是什么公司,只要薪资待遇跟之前差不多我都投了.最气人的一次面试经历是一个小公司的HR约我面试,我过去了,填完表格,还没到技术面呢,她看到我的期望薪资是15k+,直接来了一句: ...

最新文章

  1. 2022-2028年中国可降解聚乙烯农用地膜产业竞争现状及发展规模预测报告
  2. 链式运动JavaScript实现
  3. linux关闭内核命令,Linux内核关闭IPv6协议的方式
  4. 系统调用软中断处理程序system_call分析
  5. 参考ethtool写了个Linux设置、获取网卡模式的接口
  6. Tableau可视化学习笔记:day07-08
  7. 简易web服务器系统毕业论文设计,毕业论文 简易的WEB服务器的设计
  8. Java8 - Stream API快速入门
  9. Linux下安装Solr7.2.1以及配置Solr(CentOS7)
  10. c programe language learn notes 3
  11. 不仅仅是游戏,王者荣耀如何突破次元壁?
  12. android tv字体,android TV 屏幕适配 (一)
  13. 一场跨越时空的协奏:编钟、古琴与5G的“弦外之音”
  14. 为什么要有Git暂存区
  15. tiny服务器系列,温州中学TinyWebDB服务器正式启用
  16. 币圈暴涨暴跌有这五大技巧就够了
  17. opencv python 调用网络摄像头 (局域网)
  18. JAVA特点优点以及环境
  19. English语法_形容词/副词3级-比较级_常用短语
  20. 【把图片制作成电子书】名编辑电子杂志大师教程 | 导入图片转换成电子杂志

热门文章

  1. java反射--Class类
  2. Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)
  3. 洛谷 P3391 文艺平衡树
  4. 五个最佳案例带你解读 Node.js 的前后之道
  5. 中国古代历朝首都一览
  6. PHP优于Node.js的五大理由
  7. 《划时代-51单片机C语言全新教程》-第四章 工程创建与深入 概览
  8. 世界顶级精英们的人生哲学 【转】
  9. 深圳dotnet俱乐部新群
  10. 罗汉塔最少步骤_如何以最少的步骤压缩和密码保护文件?