clion本地调试nginx-1.22.1

news2024/11/17 1:56:42

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方法点击调试即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统自有服务

一、Linux中防火墙firewalld 1、什么是防火墙 防火墙&#xff1a;防范一些网络攻击。有软件防火墙、硬件防火墙之分。 防火墙选择让正常请求通过&#xff0c;从而保证网络安全性。 Windows防火墙&#xff1a; Windows防火墙的划分与开启、关闭操作&#xff1a; 2、防火墙的作…

程序员提高效率的工具和习惯分享

文档待完善.... 思维方式 X-Y Problem | 酷 壳 - CoolShell 程序员如何把控自己的职业 | 酷 壳 - CoolShell 笔记软件 语雀&#xff1a;多平台&#xff0c;云同步&#xff0c;md文档&#xff0c;在线协作&#xff1b; 一键启动必要的软件&#xff1a;bat脚本 电脑重启后可以…

canvas保存画笔的状态到栈里面

可以将画笔不同时刻的状态记录下来&#xff0c;然后保存到一个栈里面存储&#xff0c;后面可以在栈里面恢复画笔的状态&#xff0c;继续使用之前的状态绘制&#xff0c;效果如下&#xff1a;将红色&#xff0c;蓝色&#xff0c;黄色的状态都存储起来了&#xff0c;然后逐个恢复…

chatGPT结构及商业级相似模型应用调研

GPT前言 说明 ChatGPT这项技术的历史可以追溯到2018年&#xff0c;当时由Facebook实验室的团队开发出该技术&#xff0c;以开发聊天机器人为目的。随后&#xff0c;ChatGPT在2019年由来自谷歌的DeepMind团队在国际会议ICLR上发表了论文&#xff0c;其中提出了ChatGPT的技术框架…

怎么将PNG, JPEG, GIF,BMP等格式图片转化为ICO格式文件?

小ICO格式文件是一种包含一个或多个小尺寸图片的图片文件&#xff0c;主要应用在Windows系统中。 方法一&#xff1a;用软件进行格式转换 Quick Any2Ico 「【木头分享】Quick_Any2Ico.exe」&#xff1a;https://pan.quark.cn/s/ecda58bb2bd0 Quick Any2Ico是一款大小仅600K…

【逆向】Base64编码解码及逆向识别

示例代码 注意&#xff1a;该示例代码仅为Base64编码实现的其中一种&#xff0c;实际分析样本的Base64编码实现并不一定与此代码相同&#xff0c;读者应重点理解其原理部分&#xff0c;而忽略其实现形式的不同。 View Code 逆向识别 1、编码识别 2、解码识别 总结 1、识别代…

大模型与知识图谱如何相互助力

目前各行各业在数字化、智能化发展的大势所趋下&#xff0c;信息新技术不断涌现&#xff0c;也在加快深入融合到传统实体行业应用中&#xff0c;比如知识图谱、人工智能、数字孪生等等&#xff0c;特别是基于人工智能的大模型在去年底被chatgpt的带领下涌现出一波又一波的浪潮&…

阶段六-Day04-MyBatis2

一、别名 Alias 1. 为什么使用别名 一般映射文件中会包含大量<select>标签, 每个<select>中都需要配置resultType"com.bjsxt.pojo.People"&#xff0c;MyBatis提供了别名机制可以对某个类起别名或给某个包下所有类起别名&#xff0c;简化resultType取值…

面向对象【构造器】

文章目录 构造器定义构造器的作用构造器的使用说明无参构造器带参数的构造器构造器的重载使用构造器创建对象 总结 构造器定义 构造器是一种特殊类型的方法&#xff0c;它与类同名&#xff0c;没有返回值&#xff0c;并且用于在创建对象时执行初始化操作。构造器的名称必须与类…

C++笔记之关于函数名前的取址符

C笔记之关于函数名前的取址符 相关博文&#xff1a;C之指针探究(十一)&#xff1a;函数名的本质和函数指针 code review! 文章目录 C笔记之关于函数名前的取址符一.函数名可以被视为指向函数的地址二.sayHello和&sayHello是不是等同?三.Qt信号与槽中的取地址符& 一…

【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ JAVA泛型 泛型介绍&#xff1a; ①泛型&#…

julia笔记:函数

1 函数的定义&#xff08;两种方法&#xff09; function f(x,y)x yend #f (generic function with 1 method) f(x,y) x y #f(x,y) x y 2 匿名函数&#xff08;两种方法&#xff09; function (x,y)x yend ##3 (generic function with 1 method) (x,y)->x y ##5…

【2023年11月第四版教材】软考高项极限冲刺篇笔记(2)

1 我们要知道的事 1、考试的选择题不会出假大空的管理,一般较为具体 2.3 信息系统治理 首先治理的目标是什么 治理的管理层分为三层 原则:简单透明适合 COBIT IT审计范围:总体、组织、物理、逻辑、其他 IT审计风险:固有、控制、检查、总体审计 IT审计方法:访谈、调查、…

【Linux】进程间通信——共享内存

目录 一、什么是共享内存 二、共享内存的原理 三、使用共享内存实现进程间通信 3.1 shmget接口 3.1.1 key形参详解 3.2 释放共享内存 3.2.1 ipcs指令 3.2.2 ipcrm指令 3.2.3 shmctl接口 3.3 关联共享内存 3.4 去关联共享内存 3.5 使用共享内存进行进程间通信实例 …

YMK_周报2

周报 读论文 投机采样 为什么大语言模型&#xff08;LLM&#xff09;的推理过程文本生成这么慢&#xff1f; 因为运行大型模型的前向传递很慢&#xff0c;你可能需要依次执行数百次迭代。那么为什么前向传递速度慢&#xff1f;前向传递通常以矩阵乘法为主。内存带宽是此操作的…

【数据结构】八大排序算法(内含思维导图和画图分析)

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力…

跳表:为什么Redis一定要用跳表来实现有序集合

文章来源于极客时间前google工程师−王争专栏。 二分查找底层依赖的是数组随机访问的特性&#xff0c;所以只能用数组来实现。如果数据存储在链表中&#xff0c;就真的没法使用二分查找算法了吗&#xff1f; 我们可以对链表稍加改造&#xff0c;就可以支持类似“二分”的查找算…

LVGL_文件系统FS

LVGL_文件系统FS 前言&#xff1a; LVG 内置支持以下文件系统&#xff1a; 1、FATFS 2、STDIO (Linux 和 Windows 都可以使用的 C 标准函数接口&#xff0c;比如&#xff1a;fopen, fread…) 3、POSIX (Linux 和 Windows 都可以使用的 POSIX 函数接口&#xff0c;比如&#xff…

vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码

<template><el-table ref"multipleTableRef" :data"tableData" style"width: 100%"><el-table-column type"selection" width"55" /><el-table-column label"时间" width"120">…

Go学习第三章——运算符与进制

Go学习第三章——运算符与进制 1 算术运算符2 关系运算符3 逻辑运算符4 赋值运算符5 其他运算符5.1 位运算符5.2 跟指针有关的运算符 6 运算符的优先级7 获取用户终端输入8 进制转换8.1 进制基本使用8.2 进制之间的转换8.3 原码 反码 补码8.4 位运算符详解 运算符是—种特殊的符…