目錄
- 概要
- 環境搭建的大體思路
- windows下安裝linux工具鏈
- 什么是make和cmake
- 安裝c語言開發的ide
- 具體安裝步驟
- cygwin安裝
- clion安裝及插件安裝
- 克隆redis 代碼
- 如何調試
- 如何調試redis-server
概要
最近寫了spring系列,這個系列還在進行中,然后有些同學開始叫我大神,然后以為我各方面都比較厲害,當然了,我是有自知之明的,大佬大神什么的,當作一個稱呼就好,如果真的以為自己就是大神,那可能就走偏了。
其實我不少方面都比較薄弱,比如redis、mysql、jvm這些c語言寫的東西,很多書,我也看過多次,看的那段時間,你可能懂了,也可以在面試的時候,侃侃而談,但是,過一陣再問你,你可能部分細節已經記不住了。
我現在本科畢業快7年,雖然這些年一直也在學,但是記憶這東西,好像是有些退化,記個東西,感覺確實越來越容易忘;尤其,是這些平時光看不練的東西。
所以,打算在實踐中,來掌握這些東西。
比如,你說redis的字符串的底層實現,很多人可能都能答上來,是sds,但是只是看,只是記,這種簡單的還好,復雜一點的,兩個月肯定忘。
所以,我們就希望,能夠把redis的源碼拉下來看,看的過程,你可以自己在源文件里加注釋;同時,也要支持debug,來觀察程序的運行過程,來看看,一個請求進來,是怎樣編解碼,怎么樣被處理的,怎么樣返回結果的,網絡通信怎么做的,這之類的。
我們選擇的代碼,是Redis暢銷書,Redis設計與實現(第二版)里配套的代碼,作者已經加了很多注釋,我們可以結合代碼、書一起來學習,合適的情況下,我們也要能寫一個小demo,實踐實踐。
所以,第一步的環境搭建尤為重要,而且,redis看懂了,相信以后看mysql,也不會問題特別大。當然,需要一些c語言基礎,我也會在文章里講一些,我自己也是半斤八兩,邊看邊學唄,還能怎么樣呢?
這個系列,估計會更新比較慢,因為我的c語言基礎,也不是很好。
好了,我們開始吧。
環境搭建的大體思路
windows下安裝linux工具鏈
大家記得在linux上,怎么安裝redis那些的吧,是不是有個configure,make,make install啥的,為啥java程序不需要這么弄呢?因為java有jvm,我們的java文件是編譯成class,在jvm上運行的,而c語言程序,是直接依賴于操作系統的,同樣的c語言程序,比如你要實現網絡功能,在windows上和在linux上,要調用的api,是不一樣的,總之呢,就是c語言程序,是嚴重依賴于底層的操作系統。
切回正題,在linux下我們是用gcc
來編譯c語言程序的,比如,針對以下這個簡單的helloWorld:
#include stdio.h>
int main(void) {
printf("hahha");
return 0;
}
要像下面這樣,用gcc
編譯為二進制,才能繼續執行:

gcc、make這些都是linux下的工具,在windows下怎么辦呢?這個不用擔心,早有人幫我們弄好了,前輩們將這些linux下的工具,移植到了windows下,現在有兩種主流方案,一種是MinGW,另一種是cygwin。
我們只需要安裝這兩種軟件中的一種,就可以在windows下使用本來在linux下才能使用的工具了,上面那個圖,就是我在windows下截的。
至于MinGW和cygwin的差別,大家自行去查詢,因為我找了些答案,感覺都有些沖突。我們的需求比較簡單,兩種都可以滿足,我這邊選擇了cygwin,建議大家和我這邊保持一致。
cygwin呢,在安裝過程中,會讓我們選擇要安裝的工具,比如gcc、g++(c++時候使用)、make、cmake等,我們可以按需選擇。
什么是make和cmake
大家參考這個鏈接:CMake與Make最簡單直接的區別
看完這個之后,我再簡單說說,我的理解是,一個程序,在linux下運行,你要寫一份makefile;如果要弄到其他平臺,這個makefile就用不了了,要再寫一份。
所以,為了跨平臺,出現了cmake,cmake是讓程序員用統一的語法來寫cmake文件,然后cmake會幫助我們生成對應的平臺下的makefile。
果然是,沒有什么是加一個中間層不能解決的。
對于java的同學,可理解為:cmake就像jvm一樣,幫助我們跨平臺。
cmake呢,也是通過前面的cygwin來安裝的。
安裝c語言開發的ide
這個呢,我咨詢了兩位朋友,做c的,然后他們都是用的visual studio,我一開始也是下載這個,但是比較大,我下載的visual studio 2012(應該是比較老的版本了),都要1.5g,下載花了就比較久,安裝又是半個小時,然后裝完還不怎么會用;
在上面的vs下載的過程中,我在網上找了下,也有很多使用jetbrains公司出的 clion
。這個呢,我目前就是用的這款,最大的好處是,它和idea、pycharm這些一樣,同一個公司出的,所以,操作界面、操作習慣、包括快捷鍵,幾乎都是差不多的,可以無縫切換。
一開始,我安裝的是clion 2018.3 版本,然后遇到個問題,也不知道怎么解決,就又下了clion 2019.1版本,問題還是沒解決,最后換了clion 2019.3版本,問題還是在,不過雖然問題一直在,但其實也無關大局,就忍一忍算了。
期間,visual studio 2012終于下載完了,裝了半個小時多,發現用著還是不太習慣,而且,好像不太支持導入cmake工程,干脆就卸了,結果,卸載又花了半天,因為它給我的電腦,裝了近20個軟件。。。我他么。。。
所以,最終我這邊的ide是 clion 2019.3,下載鏈接:clion 2019.3 鏈接
Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows)
具體安裝步驟
cygwin安裝
安裝前,先下載,下載鏈接:cygwin官網,在這里,目前下載下來的版本,是3.1.4.1,為什么要強調版本,因為clion,不同的clion
版本,支持的 cygwin
版本不一樣,我看網上都沒人提過。
clion為啥要依賴cygwin,因為clion只是個ide,具體的代碼編譯之類的,還是要gcc、cmake這些來做的,我給大家看下,我一開始下載的2018.3版本,配置了我的cygwin之后,提示如下:

這也是為什么后來,遇到問題我要升級版本的原因,因為我總感覺,有可能是這里的問題,雖然升級了版本,問題也還在。
建議大家還是和我版本保持一致。
- cygwin:3.1.4.1
- clion:2019.3
大概的安裝步驟,可以看這個:
https://www.jb51.net/article/187586.htm
https://www.jb51.net/article/193502.htm
注意的是,下面這個路徑要記住,后面會用:

然后,在設置鏡像網站時,我是用的阿里云:http://mirrors.aliyun.com/cygwin/
接下來,就是讓我們選擇要安裝的東西,網上一般給的就是如下幾個:
gcc-core、gcc-g++、make、gdb、binutils ,我建議大家把vim也裝上,方便操作。

然后就是等它安裝完成,完成后,桌面上會有如下圖標:

然后,雙擊打開,可以依次執行以下命令:
- cygcheck -c cygwin ,查看安裝的cygwin版本信息
- gcc --version ,查看安裝的gcc版本信息,這個是編譯c的
- g++ --version,查看安裝的g++版本信息,這個是編譯c++的
- gdb --version,查看gdb版本信息,這個是debug用的,非常出名
如果都沒啥問題的話,那基本就安裝好了。
然后,大家還記得前面安裝時,選擇的路徑嗎?把那個路徑的bin目錄,加到path這個環境變量,然后我們就可以在cmd里用上面那些命令了。

clion安裝及插件安裝
下載鏈接:clion 2019.3 鏈接
這個的安裝,和idea的安裝,沒啥差別,不過大家不要選太多插件,很多畢竟用不上,按需選擇吧。比如什么cvs、svn那些,裝了干啥呢,對吧。
然后我自己直接用的試用30天,等到后續真需要破解再說。
安裝過程中,可能就會讓大家配置tool chains,直接輸入前面的cygwin的目錄即可。

從上面可以看到,我們這里,用的cmake,就是cygwin下的,gdb也是的。
然后,我們可以再安裝兩個插件(Cmake Sinple highlighter 和 CMake Plus),如下:

其中一個要付費,不過可以先試用。
克隆redis 代碼
地址:https://gitee.com/ckl111/redis-3.0-annotated-cmake-in-clion
這里感謝前輩博客:https://www.jb51.net/article/218312.htm
我這里基于他的博客,對cmake 文件,做了少許的修改。
大家把代碼克隆到本地后,然后在clion中,打開工程即可。

打開工程后,大家要注意上面的CMakeList.txt,其中,已經默認給我們配置了幾個target:

其中,庫應該是不能獨立運行的,我們可以運行下面的三個,其中:
- redis-cli,redis客戶端
- redis-server,服務端
- redis-example,這個是我自己加的,主要是希望:可以像在java中那樣,啟動一個main方法,去測試一些工具類啊或者啥的,不然的話,就得寫到redis-server的代碼中,然后用redis-cli去訪問,去觸發我們的測試代碼。主要是類似于一個測試用的入口。
redis-example,我還多說一點,仔細看CmakeList.txt,可能就理解了:

如何調試
拿redis-example舉例:

不過這里的debug,有一點問題,就是會開一個單獨的cmd窗口,而不是直接在Console中輸出;printf也有點問題。
但是,使用run方式運行,則沒有任何問題。

如何調試redis-server
方法和上面一樣,其實大家更關心斷點打在哪兒吧,可以打在下面這個地方:
redis.c
文件的processCommand
,這里我還加了一行注釋給大家:
int processCommand(redisClient *c) {
/* The QUIT command is handled separately. Normal command procs will
* go through checking for replication and QUIT will cause trouble
* when FORCE_REPLICATION is enabled and would be implemented in
* a regular command proc. */
// 特別處理 quit 命令
void *commandName = c->argv[0]->ptr;
redisLog(REDIS_NOTICE, "The server is now processing %s", commandName);
調試如下:

redis-cli,我們可以就用工程給我們生成的那個,版本是配套的:

可以看到,斷點已經生效了,且,客戶端的請求已經到達。
到此這篇關于redis debug環境搭建過程詳解(使用clion)的文章就介紹到這了,更多相關redis clion debug環境搭建內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- CentOS 安裝 PHP5.5+Redis+XDebug+Nginx+MySQL全紀錄
- Windows環境下Redis Cluster環境搭建(圖文)
- 詳解docker搭建redis集群的環境搭建