主頁(yè) > 知識(shí)庫(kù) > redis debug環(huán)境搭建過(guò)程詳解(使用clion)

redis debug環(huán)境搭建過(guò)程詳解(使用clion)

熱門(mén)標(biāo)簽:溫嶺代理外呼系統(tǒng) 怎么更改地圖標(biāo)注電話(huà) 交行外呼系統(tǒng)有哪些 隨州銷(xiāo)售外呼系統(tǒng)平臺(tái) 激戰(zhàn)黃昏地圖標(biāo)注說(shuō)明 防城港市ai電銷(xiāo)機(jī)器人 不同的地圖標(biāo)注 臨滄移動(dòng)外呼系統(tǒng)哪家有 寧夏保險(xiǎn)智能外呼系統(tǒng)哪家好

概要

最近寫(xiě)了spring系列,這個(gè)系列還在進(jìn)行中,然后有些同學(xué)開(kāi)始叫我大神,然后以為我各方面都比較厲害,當(dāng)然了,我是有自知之明的,大佬大神什么的,當(dāng)作一個(gè)稱(chēng)呼就好,如果真的以為自己就是大神,那可能就走偏了。

其實(shí)我不少方面都比較薄弱,比如redis、mysql、jvm這些c語(yǔ)言寫(xiě)的東西,很多書(shū),我也看過(guò)多次,看的那段時(shí)間,你可能懂了,也可以在面試的時(shí)候,侃侃而談,但是,過(guò)一陣再問(wèn)你,你可能部分細(xì)節(jié)已經(jīng)記不住了。

我現(xiàn)在本科畢業(yè)快7年,雖然這些年一直也在學(xué),但是記憶這東西,好像是有些退化,記個(gè)東西,感覺(jué)確實(shí)越來(lái)越容易忘;尤其,是這些平時(shí)光看不練的東西。

所以,打算在實(shí)踐中,來(lái)掌握這些東西。

比如,你說(shuō)redis的字符串的底層實(shí)現(xiàn),很多人可能都能答上來(lái),是sds,但是只是看,只是記,這種簡(jiǎn)單的還好,復(fù)雜一點(diǎn)的,兩個(gè)月肯定忘。

所以,我們就希望,能夠把redis的源碼拉下來(lái)看,看的過(guò)程,你可以自己在源文件里加注釋?zhuān)煌瑫r(shí),也要支持debug,來(lái)觀(guān)察程序的運(yùn)行過(guò)程,來(lái)看看,一個(gè)請(qǐng)求進(jìn)來(lái),是怎樣編解碼,怎么樣被處理的,怎么樣返回結(jié)果的,網(wǎng)絡(luò)通信怎么做的,這之類(lèi)的。

我們選擇的代碼,是Redis暢銷(xiāo)書(shū),Redis設(shè)計(jì)與實(shí)現(xiàn)(第二版)里配套的代碼,作者已經(jīng)加了很多注釋?zhuān)覀兛梢越Y(jié)合代碼、書(shū)一起來(lái)學(xué)習(xí),合適的情況下,我們也要能寫(xiě)一個(gè)小demo,實(shí)踐實(shí)踐。

所以,第一步的環(huán)境搭建尤為重要,而且,redis看懂了,相信以后看mysql,也不會(huì)問(wèn)題特別大。當(dāng)然,需要一些c語(yǔ)言基礎(chǔ),我也會(huì)在文章里講一些,我自己也是半斤八兩,邊看邊學(xué)唄,還能怎么樣呢?

這個(gè)系列,估計(jì)會(huì)更新比較慢,因?yàn)槲业腸語(yǔ)言基礎(chǔ),也不是很好。

好了,我們開(kāi)始吧。

環(huán)境搭建的大體思路

windows下安裝linux工具鏈

大家記得在linux上,怎么安裝redis那些的吧,是不是有個(gè)configure,make,make install啥的,為啥java程序不需要這么弄呢?因?yàn)閖ava有jvm,我們的java文件是編譯成class,在jvm上運(yùn)行的,而c語(yǔ)言程序,是直接依賴(lài)于操作系統(tǒng)的,同樣的c語(yǔ)言程序,比如你要實(shí)現(xiàn)網(wǎng)絡(luò)功能,在windows上和在linux上,要調(diào)用的api,是不一樣的,總之呢,就是c語(yǔ)言程序,是嚴(yán)重依賴(lài)于底層的操作系統(tǒng)。

切回正題,在linux下我們是用gcc來(lái)編譯c語(yǔ)言程序的,比如,針對(duì)以下這個(gè)簡(jiǎn)單的helloWorld:

#include stdio.h>

int main(void) {
    printf("hahha");
    return 0;

}

要像下面這樣,用gcc編譯為二進(jìn)制,才能繼續(xù)執(zhí)行:

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

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

至于MinGW和cygwin的差別,大家自行去查詢(xún),因?yàn)槲艺伊诵┐鸢?,感覺(jué)都有些沖突。我們的需求比較簡(jiǎn)單,兩種都可以滿(mǎn)足,我這邊選擇了cygwin,建議大家和我這邊保持一致。

cygwin呢,在安裝過(guò)程中,會(huì)讓我們選擇要安裝的工具,比如gcc、g++(c++時(shí)候使用)、make、cmake等,我們可以按需選擇。

什么是make和cmake

大家參考這個(gè)鏈接:CMake與Make最簡(jiǎn)單直接的區(qū)別

看完這個(gè)之后,我再簡(jiǎn)單說(shuō)說(shuō),我的理解是,一個(gè)程序,在linux下運(yùn)行,你要寫(xiě)一份makefile;如果要弄到其他平臺(tái),這個(gè)makefile就用不了了,要再寫(xiě)一份。

所以,為了跨平臺(tái),出現(xiàn)了cmake,cmake是讓程序員用統(tǒng)一的語(yǔ)法來(lái)寫(xiě)cmake文件,然后cmake會(huì)幫助我們生成對(duì)應(yīng)的平臺(tái)下的makefile。

果然是,沒(méi)有什么是加一個(gè)中間層不能解決的。

對(duì)于java的同學(xué),可理解為:cmake就像jvm一樣,幫助我們跨平臺(tái)。

cmake呢,也是通過(guò)前面的cygwin來(lái)安裝的。

安裝c語(yǔ)言開(kāi)發(fā)的ide

這個(gè)呢,我咨詢(xún)了兩位朋友,做c的,然后他們都是用的visual studio,我一開(kāi)始也是下載這個(gè),但是比較大,我下載的visual studio 2012(應(yīng)該是比較老的版本了),都要1.5g,下載花了就比較久,安裝又是半個(gè)小時(shí),然后裝完還不怎么會(huì)用;

在上面的vs下載的過(guò)程中,我在網(wǎng)上找了下,也有很多使用jetbrains公司出的 clion。這個(gè)呢,我目前就是用的這款,最大的好處是,它和idea、pycharm這些一樣,同一個(gè)公司出的,所以,操作界面、操作習(xí)慣、包括快捷鍵,幾乎都是差不多的,可以無(wú)縫切換。

一開(kāi)始,我安裝的是clion 2018.3 版本,然后遇到個(gè)問(wèn)題,也不知道怎么解決,就又下了clion 2019.1版本,問(wèn)題還是沒(méi)解決,最后換了clion 2019.3版本,問(wèn)題還是在,不過(guò)雖然問(wèn)題一直在,但其實(shí)也無(wú)關(guān)大局,就忍一忍算了。

期間,visual studio 2012終于下載完了,裝了半個(gè)小時(shí)多,發(fā)現(xiàn)用著還是不太習(xí)慣,而且,好像不太支持導(dǎo)入cmake工程,干脆就卸了,結(jié)果,卸載又花了半天,因?yàn)樗o我的電腦,裝了近20個(gè)軟件。。。我他么。。。

所以,最終我這邊的ide是 clion 2019.3,下載鏈接:clion 2019.3 鏈接

Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows)

具體安裝步驟

cygwin安裝

安裝前,先下載,下載鏈接:cygwin官網(wǎng),在這里,目前下載下來(lái)的版本,是3.1.4.1,為什么要強(qiáng)調(diào)版本,因?yàn)閏lion,不同的clion版本,支持的 cygwin版本不一樣,我看網(wǎng)上都沒(méi)人提過(guò)。

clion為啥要依賴(lài)cygwin,因?yàn)閏lion只是個(gè)ide,具體的代碼編譯之類(lèi)的,還是要gcc、cmake這些來(lái)做的,我給大家看下,我一開(kāi)始下載的2018.3版本,配置了我的cygwin之后,提示如下:

這也是為什么后來(lái),遇到問(wèn)題我要升級(jí)版本的原因,因?yàn)槲铱偢杏X(jué),有可能是這里的問(wèn)題,雖然升級(jí)了版本,問(wèn)題也還在。

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

  • cygwin:3.1.4.1
  • clion:2019.3

大概的安裝步驟,可以看這個(gè):

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

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

注意的是,下面這個(gè)路徑要記住,后面會(huì)用:

然后,在設(shè)置鏡像網(wǎng)站時(shí),我是用的阿里云:http://mirrors.aliyun.com/cygwin/

接下來(lái),就是讓我們選擇要安裝的東西,網(wǎng)上一般給的就是如下幾個(gè):

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

然后就是等它安裝完成,完成后,桌面上會(huì)有如下圖標(biāo):

然后,雙擊打開(kāi),可以依次執(zhí)行以下命令:

  • cygcheck -c cygwin ,查看安裝的cygwin版本信息
  • gcc --version ,查看安裝的gcc版本信息,這個(gè)是編譯c的
  • g++ --version,查看安裝的g++版本信息,這個(gè)是編譯c++的
  • gdb --version,查看gdb版本信息,這個(gè)是debug用的,非常出名

如果都沒(méi)啥問(wèn)題的話(huà),那基本就安裝好了。

然后,大家還記得前面安裝時(shí),選擇的路徑嗎?把那個(gè)路徑的bin目錄,加到path這個(gè)環(huán)境變量,然后我們就可以在cmd里用上面那些命令了。

clion安裝及插件安裝

下載鏈接:clion 2019.3 鏈接

這個(gè)的安裝,和idea的安裝,沒(méi)啥差別,不過(guò)大家不要選太多插件,很多畢竟用不上,按需選擇吧。比如什么cvs、svn那些,裝了干啥呢,對(duì)吧。

然后我自己直接用的試用30天,等到后續(xù)真需要破解再說(shuō)。

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

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

然后,我們可以再安裝兩個(gè)插件(Cmake Sinple highlighter 和 CMake Plus),如下:

其中一個(gè)要付費(fèi),不過(guò)可以先試用。

克隆redis 代碼

地址:https://gitee.com/ckl111/redis-3.0-annotated-cmake-in-clion

這里感謝前輩博客:https://www.jb51.net/article/218312.htm

我這里基于他的博客,對(duì)cmake 文件,做了少許的修改。

大家把代碼克隆到本地后,然后在clion中,打開(kāi)工程即可。

打開(kāi)工程后,大家要注意上面的CMakeList.txt,其中,已經(jīng)默認(rèn)給我們配置了幾個(gè)target:

其中,庫(kù)應(yīng)該是不能獨(dú)立運(yùn)行的,我們可以運(yùn)行下面的三個(gè),其中:

  • redis-cli,redis客戶(hù)端
  • redis-server,服務(wù)端
  • redis-example,這個(gè)是我自己加的,主要是希望:可以像在java中那樣,啟動(dòng)一個(gè)main方法,去測(cè)試一些工具類(lèi)啊或者啥的,不然的話(huà),就得寫(xiě)到redis-server的代碼中,然后用redis-cli去訪(fǎng)問(wèn),去觸發(fā)我們的測(cè)試代碼。主要是類(lèi)似于一個(gè)測(cè)試用的入口。

redis-example,我還多說(shuō)一點(diǎn),仔細(xì)看CmakeList.txt,可能就理解了:

如何調(diào)試

拿redis-example舉例:

不過(guò)這里的debug,有一點(diǎn)問(wèn)題,就是會(huì)開(kāi)一個(gè)單獨(dú)的cmd窗口,而不是直接在Console中輸出;printf也有點(diǎn)問(wèn)題。

但是,使用run方式運(yùn)行,則沒(méi)有任何問(wèn)題。

如何調(diào)試redis-server

方法和上面一樣,其實(shí)大家更關(guān)心斷點(diǎn)打在哪兒吧,可以打在下面這個(gè)地方:

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);

調(diào)試如下:

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

可以看到,斷點(diǎn)已經(jīng)生效了,且,客戶(hù)端的請(qǐng)求已經(jīng)到達(dá)。

到此這篇關(guān)于redis debug環(huán)境搭建過(guò)程詳解(使用clion)的文章就介紹到這了,更多相關(guān)redis clion debug環(huán)境搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • CentOS 安裝 PHP5.5+Redis+XDebug+Nginx+MySQL全紀(jì)錄
  • Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文)
  • 詳解docker搭建redis集群的環(huán)境搭建

標(biāo)簽:忻州 紅河 青海 沈陽(yáng) 哈密 無(wú)錫 河源 阜陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis debug環(huán)境搭建過(guò)程詳解(使用clion)》,本文關(guān)鍵詞  redis,debug,環(huán)境,搭建,過(guò)程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis debug環(huán)境搭建過(guò)程詳解(使用clion)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于redis debug環(huán)境搭建過(guò)程詳解(使用clion)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章