天天看點

使用Qt Creator作為Linux IDE,實作Redis源碼編譯和斷點調試(2)

7、編譯通過,運作會報錯:

09:26:00: Starting /root/Downloads/nginx/nginx-1.12.2/build-nginxQtProject_firecat-Desktop_Qt_5_9_7_GCC_64bit-Debug/nginx...

nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)

2018/11/04 09:26:00 [emerg] 13081#0: open() "/usr/local/nginx/conf/nginx.conf" failed (2: No such file or directory)

09:26:00: /root/Downloads/nginx/nginx-1.12.2/build-nginxQtProject_firecat-Desktop_Qt_5_9_7_GCC_64bit-Debug/nginx exited with code 1

解決辦法:手動建立/usr/local/nginx/logs和conf路徑,把配置檔案拷貝過來。

另外,html檔案夾(裡面有兩個檔案)也記得拷貝到/usr/local/nginx/路徑下。

8、我們終于可以執行斷點調試,大功告成!

使用Qt Creator作為Linux IDE,實作Redis源碼編譯和斷點調試(2)

nginx啟動之後,在浏覽器輸入http://localhost/,即可看到index.html網頁。

9、附錄:完整的Qt工程源碼下載下傳

https://download.csdn.net/download/libaineu2004/10763167

---

參考文獻:

https://blog.csdn.net/zileqide/article/details/76736668

檢視nginx是否啟動成功

netstat -lnpt | grep nginx

或者ps -ef |grep nginx 檢視nginx程序是否啟動

或者netstat -nalp|grep 80 檢視80端口的程序

終止nginx

kill -9 <nginx程序号>(一般有2~3個程序,通過netstat -lnpt | grep nginx指令可以查詢程序号)

例如kill -9 36533

2、源碼準備

使用黃建宏的帶中文注釋的版本,

https://github.com/huangz1990/redis-3.0-annotated

我們解壓源碼,先使用gcc編譯,主要目的是把deps庫編譯出來

[root@localhost redis_study]# chmod -R 777 redis-3.0-annotated-unstable

[root@localhost redis_study]# cd redis-3.0-annotated-unstable/

[root@localhost redis-3.0-annotated-unstable]# make

3、和nginx源碼不同,redis的結構更複雜,因為nginx的編譯結果是單一的執行檔案,而redis會生成N多個執行檔案:

redis-server

redis-cli

redis-benchmark

redis-check-aof

redis-check-dump

redis-sentinel

是以,我們建立的Qt Creator必須是多個子項目類型:

使用Qt Creator作為Linux IDE,實作Redis源碼編譯和斷點調試(2)

4、redisQtProject.pro,firecat這裡隻關注最主要的redis-server和redis-cli兩個執行程式

TEMPLATE = subdirs

CONFIG += ordered

SUBDIRS += \

   redis-server \

   redis-cli

common.pri,因為前面已經把deps的庫編譯好了,這裡隻需要添加庫依賴即可

isEmpty(PREFIX_SRC) {
    PREFIX_SRC = ../../src
}
 
isEmpty(PREFIX_DEPS) {
    PREFIX_DEPS = ../../deps
}
 
LIBS = -ldl -lpthread -lcrypt -lpcre -lz
LIBS += "$$PREFIX_DEPS/hiredis/libhiredis.a"
LIBS += "$$PREFIX_DEPS/lua/src/liblua.a"
 
INCLUDEPATH += \
    #$$PREFIX_SRC/ \
    $$PREFIX_DEPS/hiredis \
    #$$PREFIX_DEPS/hiredis/adapters \
    $$PREFIX_DEPS/jemalloc/include/ \
    $$PREFIX_DEPS/jemalloc/include/jemalloc/internal \
    #$$PREFIX_DEPS/jemalloc/include/msvc_compat \
    $$PREFIX_DEPS/linenoise \
    $$PREFIX_DEPS/lua/src \
    $$PREFIX_DEPS/lua/etc
 
HEADERS += \
    $$PREFIX_SRC/adlist.h \
    $$PREFIX_SRC/ae.h \
    $$PREFIX_SRC/anet.h \
    $$PREFIX_SRC/asciilogo.h \
    $$PREFIX_SRC/bio.h \
    $$PREFIX_SRC/cluster.h \
    $$PREFIX_SRC/config.h \
    $$PREFIX_SRC/crc64.h \
    $$PREFIX_SRC/dict.h \
    $$PREFIX_SRC/endianconv.h \
    $$PREFIX_SRC/fmacros.h \
    $$PREFIX_SRC/help.h \
    $$PREFIX_SRC/intset.h \
    $$PREFIX_SRC/lzf.h \
    $$PREFIX_SRC/lzfP.h \
    $$PREFIX_SRC/pqsort.h \
    $$PREFIX_SRC/rand.h \
    $$PREFIX_SRC/rdb.h \
    $$PREFIX_SRC/redis.h \
    $$PREFIX_SRC/redisassert.h \
    $$PREFIX_SRC/release.h \
    $$PREFIX_SRC/rio.h \
    $$PREFIX_SRC/sds.h \
    $$PREFIX_SRC/sha1.h \
    $$PREFIX_SRC/slowlog.h \
    $$PREFIX_SRC/solarisfixes.h \
    $$PREFIX_SRC/testhelp.h \
    $$PREFIX_SRC/util.h \
    $$PREFIX_SRC/version.h \
    $$PREFIX_SRC/ziplist.h \
    $$PREFIX_SRC/zipmap.h \
    $$PREFIX_SRC/zmalloc.h \
    $$PREFIX_DEPS/linenoise/linenoise.h

      

redis-server.pro

TARGET = redis-server
 
include(../common.pri)
 
SOURCES += \
    $$PREFIX_SRC/adlist.c \
    $$PREFIX_SRC/ae.c \
    $$PREFIX_SRC/ae_epoll.c \
    $$PREFIX_SRC/ae_evport.c \
    $$PREFIX_SRC/ae_kqueue.c \
    $$PREFIX_SRC/ae_select.c \
    $$PREFIX_SRC/anet.c \
    $$PREFIX_SRC/aof.c \
    $$PREFIX_SRC/bio.c \
    $$PREFIX_SRC/bitops.c \
    $$PREFIX_SRC/blocked.c \
    $$PREFIX_SRC/cluster.c \
    $$PREFIX_SRC/config.c \
    $$PREFIX_SRC/crc16.c \
    $$PREFIX_SRC/crc64.c \
    $$PREFIX_SRC/db.c \
    $$PREFIX_SRC/debug.c \
    $$PREFIX_SRC/dict.c \
    $$PREFIX_SRC/endianconv.c \
    $$PREFIX_SRC/hyperloglog.c \
    $$PREFIX_SRC/intset.c \
    $$PREFIX_SRC/lzf_c.c \
    $$PREFIX_SRC/lzf_d.c \
    $$PREFIX_SRC/memtest.c \
    $$PREFIX_SRC/multi.c \
    $$PREFIX_SRC/networking.c \
    $$PREFIX_SRC/notify.c \
    $$PREFIX_SRC/object.c \
    $$PREFIX_SRC/pqsort.c \
    $$PREFIX_SRC/pubsub.c \
    $$PREFIX_SRC/rand.c \
    $$PREFIX_SRC/rdb.c \
    #$$PREFIX_SRC/redis-benchmark.c \
    #$$PREFIX_SRC/redis-check-aof.c \
    #$$PREFIX_SRC/redis-check-dump.c \
    #$$PREFIX_SRC/redis-cli.c \
    #$$PREFIX_SRC/redis.c \
    $$PREFIX_SRC/release.c \
    $$PREFIX_SRC/replication.c \
    $$PREFIX_SRC/rio.c \
    $$PREFIX_SRC/scripting.c \
    $$PREFIX_SRC/sds.c \
    $$PREFIX_SRC/sentinel.c \
    $$PREFIX_SRC/setproctitle.c \
    $$PREFIX_SRC/sha1.c \
    $$PREFIX_SRC/slowlog.c \
    $$PREFIX_SRC/sort.c \
    $$PREFIX_SRC/syncio.c \
    $$PREFIX_SRC/t_hash.c \
    $$PREFIX_SRC/t_list.c \
    $$PREFIX_SRC/t_set.c \
    $$PREFIX_SRC/t_string.c \
    $$PREFIX_SRC/t_zset.c \
    $$PREFIX_SRC/util.c \
    $$PREFIX_SRC/ziplist.c \
    $$PREFIX_SRC/zipmap.c \
    $$PREFIX_SRC/zmalloc.c \
    $$PREFIX_DEPS/linenoise/linenoise.c
 
SOURCES += \
    $$PREFIX_SRC/redis.c

      

redis-cli.pro檔案類似,這裡不再贅述。

5、我們終于可以執行斷點調試,大功告成!

使用Qt Creator作為Linux IDE,實作Redis源碼編譯和斷點調試(2)

6、附錄:完整的Qt工程源碼下載下傳

https://download.csdn.net/download/libaineu2004/10763933

繼續閱讀