clion本地调试nginx-1.22.1

本文介绍了如何在本地调试Nginx,包括下载源码、生成CMakeLists.txt、修改配置、创建运行时目录、配置单进程模式,并使用Clion进行调试的过程。
摘要由CSDN通过智能技术生成

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

3 生成nginx项目的CMakeLists.txt

3.1 创建bash脚本文件cmake

cd /opt/third-party/nginx-1.22.1
vim auto/cmake

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


3.2 执行configure脚本生成CMakeLists.txt

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

最终在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)

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/

5 修改nginx配置文件

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

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

daemon off;
master_process off;

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

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

7 小结

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学完C/C++、数据结构与算法、操作系统、网络编程,还在发愁没有出彩的项目可以写在简历上?总是反问自己,大学四年到底学了什么?不必焦虑,相信你已经具备足够的基础知识,只差一个实战的机会。Nginx作为高可用,高并发,高性能 的BSD lisence 开源项目,应用广泛。2023年就已经超越老大哥Apache,在Web Server 市场中独领风骚。如此优秀的项目近在咫尺。谈中国互联网的发展,就不得不提Nginx,她对中国互联网发展起到了重要的推动作用。但纵观整个互联网,均是从运维角度出发,教授简单的Nginx配置,偶尔有一些点到为止的玩具模块讲解,也居于表面而深度略浅。在信息爆炸的年代,缺少探索Nginx是如何实现其三高特色的系列视频课程,与其在互联网的地位是极度不匹配的,我认为非常可惜。高性能的Nginx对资源的低占用率,其健壮的内存管理,精妙的模块化设计,离不开她优美而质朴,简约而不简单的源码,否则也不会成为淘宝Tengine架构的母体。无论作为应届生,还是初中级程序员,仅停留在如何配置nginx上,和一些道听途说的Nginx八股文概念上,是远远不够的。久负盛名的Nginx其实距离大型复杂的项目还比较远,设计和实现也只是需要一些实战工作经验。完全可以作为处女项目去用心学习。随着深入Nginx,你可以看到各种计算机基础课的影子,她们是那么的似曾相识, 而你,还是那个单手解不开发带,最后只能伴着发香,扫兴而归的少年吗?放心,一切交给Nginx,成熟稳重的她,可以教会你所有。任何疑问,她都会给你答案。Talk is cheap, show me the code.,让我们出出汗,尽情的在Nginx源码里释放你学习的激情吧!授课方式:1. 实际操作 + 内存布局图详解 + 流程图详解,脱离源码分析的枯燥。2. 概念先行,先讲基础知识,再扣源码细节。做到高效。适用人群:1. 在校学生, 正在找工作的应届生。2. 对网络编程感兴趣的初中级 C/C++ 程序员。3. 想丰富简历的程序员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值