• clion本地调试nginx-1.22.1


    1 概述

    nginx是一个多进程模型的流量代理软件,在本地调试时需要将它设置为单进程模式。

    2 下载nginx源码

    mkdir -p /opt/third-party
    cd /opt/third-party
    wget http://nginx.org/download/nginx-1.22.1.tar.gz
    tar xf nginx-1.22.1.tar.gz
    ls /opt/third-party/nginx-1.22.1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3 生成nginx项目的CMakeLists.txt

    3.1 创建bash脚本文件cmake

    cd /opt/third-party/nginx-1.22.1
    vim auto/cmake
    
    • 1
    • 2

    cmake文件的内容如下:

    #!/usr/bin/env bash
    NGX_CMAKE_FILE=CMakeLists.txt
    NGX_CMAKE_TMP=$NGX_OBJS/tmp
    
    #output includes
    cmake_ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS \
                 sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
                       -e "s/\//$ngx_regex_dirsep/g"`
    cat << END                                  > $NGX_CMAKE_TMP
    cmake_minimum_required(VERSION 3.6)
    include_directories(
        .
        $cmake_ngx_incs)
    END
    
    #output src
    cmake_ngx_src="$CORE_SRCS $HTTP_SRCS $MAIL_SRCS $NGX_MISC_SRCS $NGX_ADDON_SRCS $NGX_SHARED_SRCS"
    
    cmake_ngx_src=`echo $cmake_ngx_src | sed -e "s/  *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"\
                                 -e "s/\//$ngx_regex_dirsep/g"`
    
    cat << END                                    >> $NGX_CMAKE_TMP
    set(SOURCE_FILES
        $NGX_OBJS/ngx_modules.c
        $cmake_ngx_src)
    END
    
    #output target
    cat << END                                   >> $NGX_CMAKE_TMP
    add_executable(nginx \${SOURCE_FILES})
    END
    
    
    #output lib
    echo ${CORE_LIBS}
    CMAKE_CORE_LIBS=`echo ${CORE_LIBS} | sed -e "s/-l//g"`
    
    cat << END                                   >> $NGX_CMAKE_TMP
    target_link_libraries(nginx $CMAKE_CORE_LIBS)
    END
    
    if [ -f $NGX_CMAKE_TMP ]
    then
        (cat $NGX_CMAKE_TMP | sed -e "s/\\\//g") > $NGX_CMAKE_FILE
        rm $NGX_CMAKE_TMP
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    3.2 执行configure脚本生成CMakeLists.txt

    cd /opt/third-party/nginx-1.22.1
    ./configure --prefix="./"
    
    • 1
    • 2

    最终在nginx源码根目录会出现一个文件CMakeLists.txt。
    在这里插入图片描述


    3.3 修改CMakeLists.txt

    将include_directories指令进行修改,内容如下,否则clion会将/root目录也作为头文件的搜索路径,这是没有必要的。

    include_directories(
        .
        src/core src/event src/event/modules src/os/unix objs src/http src/http/modules)
    
    • 1
    • 2
    • 3

    4 创建nginx运行时必要的目录和文件

    clion这个编辑器,调试过程中的产物都位于cmake-build-debug目录下,因此需要在这个目录下创建相关文件。

    cd /opt/third-party/nginx-1.22.1
    mkdir -p cmake-build-debug/logs
    /bin/cp -fr conf cmake-build-debug/
    /bin/cp -fr html cmake-build-debug/
    
    • 1
    • 2
    • 3
    • 4

    5 修改nginx配置文件

    cd /opt/third-party/nginx-1.22.1
    vim cmake-build-debug/conf/nginx.conf
    
    • 1
    • 2

    在文件开头新增如下两行内容,表示nginx处于前台运行并且是单进程模式工作。

    daemon off;
    master_process off;
    
    • 1
    • 2

    6 clion打开nginx源码进行调试

    在/opt/third-party/nginx-1.22.1/src/core/nginx.c中找main方法,右键点击调试。
    在这里插入图片描述
    接着在/opt/third-party/nginx-1.22.1/src/http/ngx_http_core_module.c文件的858行打断点,使用curl命令访问

    curl 127.0.0.1
    
    • 1

    发现clion已正常进入断点。
    在这里插入图片描述

    7 小结

    使用clion调试nginx,是需要CMakeLists.txt文件,而CMakeLists.txt文件是通过nginx源码目录下的configure脚本来生成。有了CMakeLists.txt文件,只需要创建nginx运行时必须使用到的目录和文件,打开clion找到main方法点击调试即可。

  • 相关阅读:
    Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so)
    BUUCTF内涵的软件 1
    进程,线程,协程
    对汉诺塔n=4的情况进行解析
    HTML5-CSS3
    做得好 vs 做得快?
    YOLOv7训练自己的数据集
    二手车商城交易网站平台(Java+SSM+MySQL)
    wpr -start generalprofile -start pool -filemode 这句命令具体是什么意思
    关于Idea合并不同分支代码你怎么看
  • 原文地址:https://blog.csdn.net/nangonghen/article/details/133975239