可以通过 gdb / vscode 调试 redis 源码,理解 redis 工作流程。
视频
- bilibili (Debug Redis in VsCode with Gdb)
- youtube (Debug Redis in VsCode with Gdb )
- 对应操作文档: github
gdb 常用命令
详细文档通过命令查看:
man gdb
| 命令 | 操作 |
|---|---|
| r | 运行调试 |
| n | 下一步 |
| c | 继续运行 |
| ctrl + c | 中断信号 |
| c/continue | 中断后继续运行 |
| s | 进入一个函数 |
| finish | 退出函数 |
| l | 列出代码行 |
| b | 断点 显示断点列表 info b 删除断点 delete number 清除断点 clear |
| n | 下一步 |
| until | 跳至行号 until |
| p | 打印 打印数组信息 p *array@len p/x 按十六进制格式显示变量 |
| bt/backtrace | 堆栈bt <-n> -n表一个负整数,表示只打印栈底下n层的栈信息。 |
| f/frame | 进入指定堆栈层 f |
| thread apply all bt | 显示线程所有堆栈 |
| attach | 绑定进程调试 attach <-p pid> |
| detach | 取消绑定调试进程 |
| disassemble | 看二进制数据 disassemble |
| x | 查看内存 |
| focus | 显示源码界面 |
| display | 显示变量 |
| info registers | 查看寄存器 |
安装编译 redis
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar xzf redis-3.2.8.tar.gz
cd redis-3.2.8
更新 Makefile,修改相应编译项
vim src/Makefile
# OPTIMIZATION?=-O2
OPTIMIZATION?=-O0
# REDIS_LD=$(QUIET_LINK)$(CC) $(FINAL_LDFLAGS)
REDIS_LD=$(QUIET_LINK)$(CC) $(FINAL_LDFLAGS) $(OPTIMIZATION)
make clean; make
gdb 调试流程
| 步骤 | 命令 | 描述 |
|---|---|---|
| 1 | sudo gdb --args ./src/redis-server redis.conf | 启动调试 |
| 2 | r | 运行程序 |
| 3 | ctrl + c(键盘操作) | 中断程序 |
| 4 | b dict.c:dictAdd | 对应代码下断点 |
| 5 | c | 继续运行程序 |
| 6 | redis-cli set k5 v5 | 启动 client 连接redis-server测试(redis 默认端口 6379) |
| 7 | focus | 进入源码窗口调试 |
| 8 | bt | 程序堆栈(查看接口调用流程) |
| 9 | f 0 | 进入堆栈第 0 层 |
| 10 | n | 单步调试 |


vscode 调试流程
启动 vscode
因为 gdb 在 macOS 下需要 sudo 提升权限,vscode 配置貌似没有这个选项设置。所以只能用下面这个命令启动 vscode 项目
# redis 源码本地目录
cd ~/src/other/redis-3.2.8
# vscode 打开 redis 源码目录
sudo code --user-data-dir="~/.vscode-root" .
vscode 项目配置
- launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "gcc build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/src/redis-server",
"args": [
"redis.conf"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "shell"
}
]
}
- tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "shell",
"type": "shell",
"command": "/usr/bin/make"
}
]
}
vscode 调试

本文详细介绍如何使用gdb和vscode调试Redis源码,包括启动调试、设置断点、单步执行、查看堆栈等关键步骤,帮助理解Redis的工作流程。
711

被折叠的 条评论
为什么被折叠?



