redis & gdb & vscode & debug 調試

可以通過 gdb / vscode 調試 redis 源碼,理解 redis 工作流程。


視頻


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 調試工具 — 使用方法淺析

Linux中gdb 查看core堆棧信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章