日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 源码都没调试过,怎么能说熟悉 redis 呢? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:背景

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 呢?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。