1. 程式人生 > 程式設計 >redis debug環境搭建過程詳解(使用clion)

redis debug環境搭建過程詳解(使用clion)

目錄
  • 概要
  • 環境搭建的大體思路
    • windows下安裝工具鏈
    • 什麼是make和cmake
    • 安裝c語言開發的ide
  • 具體安裝步驟
    • cygwin安裝
      • clion安裝及外掛安裝
        • 克隆redis 程式碼
          • 如何除錯
            • 如何除錯redis-server

              概要

              最近寫了spring系列,這個系列還在進行中,然後有些同學開始叫我大神,然後以為我各方面都比較厲害,當然了,我是有自知之明的,大佬大神什麼的,當作一個稱呼就好,如果真的以為自己就是大神,那可能就走偏了。

              其實我不少方面都比較薄弱,比如redis、、jvm這些c語言寫的東西,很多書,我也看過多次,看的那段時間,你可能懂了,也可以在面試的時候,侃侃而談,但是,過一陣再問你,你可能部分細節已經記不住了。

              我現在本科畢業快7年,雖然這些年一直也在學,但是記憶這東西,好像是有些退化,記個東西,感覺確實越來越容易忘;尤其,是這些平時光看不練的東西。

              所以,打算在實踐中,來掌握這些東西。

              比如,你說redis的字串的底層實現,很多人可能都能答上來,是sds,但是隻是看,只是記,這種簡單的還好,複雜一點的,兩個月肯定忘。

              所以,我們就希望,能夠把redis的原始碼拉下來看,看的過程,你可以自己在原始檔里加註釋;同時,也要支援debug,來觀察程式的執行過程,來看看,一個請求進來,是怎樣編解碼,怎麼樣被處理的,怎麼樣返回結果的,網路通訊怎http://www.cppcns.com麼做的,這之類的。

              我們選擇的程式碼,是Redis暢銷書,Redis設計與實現(第二版)裡配套的程式碼,作者已經加了很多註釋,我們可以結合程式碼、書一起來學習,合適的情況下,我們也要能寫一個小demo,實踐實踐。

              所以,第一步的環境搭建尤為重要,而且,redis看懂了,相信以後看mysql,也不會問題特別大。當然,需要一些c語言基礎,我也會在文章裡講一些,我自己也是半斤八兩,邊看邊學唄,還能怎麼樣呢?

              這個系列,估計會更新比較慢,因為我的c語言基礎,也不是很好。

              好了,我們開始吧。

              環境搭建的大體思路

              windows下安裝linux工具鏈

              大家記得在linux上,怎麼安裝redis那些的吧,是不是有個configure,make,make install啥的,為啥程式不需要這麼弄呢?因為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編譯為二進位制,才能繼續執行:

              redis debug環境搭建過程詳解(使用clion)

              gcc、make這些都是linux下的工具,在windows下怎麼辦呢?這個不用擔心,早有人幫我們弄好了,前輩們將這些linux下的工具,移植到了windows下,現在有兩種主流方案,一種是MinGW,另一種是cygwin。

              我們只需要安裝這兩種軟體中的一種,就可以在windows下使用本來在linux下才能使用的工具了,上面那個圖,就是我在windows下截的。

              至於Mihttp://www.cppcns.comnGW和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語言開www.cppcns.com發的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之後,提示如下:

              redis debug環境搭建過程詳解(使用clion)

              這也是為什麼後來,遇到問題我要升級版本的原因,因為我總感覺,有可能是這裡的問題,雖然升級了版本,問題也還在。

              建議大家還是和我版本保持一致。

              • cygwin:3.1.4.1
              • clion:2019.3

              大概的安裝步驟,可以看這個:

              https://www.jb51.net/article/187586.htm

              https://www.jb51.net/article/193502.htm

              注意的是,下面這個路徑要記住,後面會用:

              redis debug環境搭建過程詳解(使用clion)

              然後,在設定映象時,我是用的阿里雲:http://mirrors.aliyun.com/cygwin/

              接下來,就是讓我們選擇要安裝的東西,網上一般給的就是如下幾個:

              gcc-core、gcc-g++、make、gdb、binutils ,我建議大家把vim也裝上,方便操作。

              redis debug環境搭建過程詳解(使用clion)

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

              redis debug環境搭建過程詳解(使用clion)

              然後,雙擊開啟,可以依次執行以下命令:

              • cygcheck -c cygwin,檢視安裝的cygwin版本資訊
              • gcc --version,檢視安裝的gcc版本資訊,這個是編譯c的
              • g++ --version,檢視安裝的g++版本資訊,這個是編譯c++的
              • gdb --version,檢視gdb版本資訊,這個是debug用的,非常出名

              如果都沒啥問題的話,那基本就安裝好了。

              然後,大家還記得前面安裝時,選擇的路徑嗎?把那個路徑的bin目錄,加到path這個環境變數,然後我們就可以在cmd裡用上面那些命令了。

              redis debug環境搭建過程詳解(使用clion)

              clion安裝及外掛安裝

              下載連結:clion 2019.3 連結

              這個的安裝,和idea的安裝,沒啥差別,不過大家不要選太多外掛,很多畢竟用不上,按需選擇吧。比如什麼cvs、svn那些,裝了幹啥呢,對吧。

              然後我自己直接用的試用30天,等到後續真需要破解再說。

              安裝過程中,可能就會讓大家配置tool chains,直接輸入前面的cygwin的目錄即可。

              redis debug環境搭建過程詳解(使用clion)

              從上面可以看到,我們這裡,用的cmake,就是cygwin下的,gdb也是的。

              然後,我們可以再安裝兩個外掛(Cmake Sinple highlighter 和 CMake Plus),如下:

              redis debug環境搭建過程詳解(使用clion)

              其中一個要付費,不過可以先試用。

              克隆redis 程式碼

              地址:https://gitee.com/ckl111/redhttp://www.cppcns.comis-3.0-annotated-cmake-in-clion

              這裡感謝前輩部落格:https://www.jb51.net/article/218312.htm

              我這裡基於他的部落格,對cmake 檔案,做了少許的修改。

              大家把程式碼克隆到本地後,然後在clion中,開啟工程即可。

              redis debug環境搭建過程詳解(使用clion)

              開啟工程後,大家要注意上面的CMakeList.txt,其中,已經預設給我們配置了幾個target:

              redis debug環境搭建過程詳解(使用clion)

              其中,庫應該是不能獨立執行的,我們可以執行下面的三個,其中:

              • redis-cli,redis客戶端
              • redis-server,服務端
              • redis-example,這個是我自己加的,主要是希望:可以像在java中那樣,啟動一個main方法,去測試一些工具類啊或者啥的,不然的話,就得寫到redis-server的程式碼中,然後用redis-cli去訪問,去觸發我們的測試程式碼。主要是類似於一個測試用的入口。

              redis-example,我還多說一點,仔細看CmakeList.txt,可能就理解了:

              redis debug環境搭建過程詳解(使用clion)

              如何除錯

              拿redis-example舉例:

              redis debug環境搭建過程詳解(使用clion)

              不過這裡的debug,有一點問題,就是會開一個單獨的cmd視窗,而不是直接在Console中輸出;printf也有點問題。

              但是,使用run方式執行,則沒有任何問題。

              redis debug環境搭建過程詳解(使用clion)

              如何除錯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 debug環境搭建過程詳解(使用clion)

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

              redis debug環境搭建過程詳解(使用clion)

              可以看到,斷點已經生效了,且,客戶端的請求已經到達。

              到此這篇關於redis debug環境搭建過程詳解(使用clion)的文章就介紹到這了,更多相關redis clion debug環境搭建內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!