nginx clion - yaokun123/php-wiki GitHub Wiki

一、CMakeLists.txt文件的生成

1、编译并生成

可以参考:https://github.com/YuXiangZhao/nginx_cmake

编译并生成CMakeLists文件,但是在尝试中遇到perc.h file not found的问题

2、直接编辑CMakeLists文件

可以参考:https://stackoverflow.com/questions/26918459/using-local-makefile-for-clion-instead-of-cmake

# 亲测有效

cmake_minimum_required(VERSION 2.8.4)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest COMMAND make -C ${mytest_SOURCE_DIR}
                         CLION_EXE_DIR=${PROJECT_BINARY_DIR})

cmake_minimum_required(VERSION 3.3)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest ALL COMMAND mingw32-make WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

二、编译生成nginx可执行文件

./configure --prefix=你的安装路径 --with-debug

三、配置Configurations

Exexutable:选择上一步安装好的nginx二进制可执行文件
Program arguments:设置 -c /Users/yaokun/nginx-private/nginx-1.21.4/conf/nginx.conf
                   主要是指定nginx加载的配置文件

点击debug即可

四、关于调试

可以参考:https://blog.csdn.net/liaomin416100569/article/details/105127557/

经过上述转换过程基本可以启动nginx了,并且可通过命令查看到nginx进程了,但是进程在clion中一启用就自动结束了,但是系统中有进程,细心的就知道了,这是因为daemon引起的。 nginx.conf中取消daemon:

daemon off;

修改后发现进程虽然不自动关闭,但是关闭clion进程,linux还是存在worker进程,细心的就知道了停止的是master进程,这是master-worker进程模式引起的,此时因为取消master模式:

master_process off;

此时就可以愉快的在clion中断点任意调试,方便代码阅读和确认。

比如在nginx-1.21.4/src/http/ngx_http_request.c方法ngx_http_process_request中下断点,所有请求都被被这个函数处理,通过浏览器访问即可锁定断点处

五、多进程的调试

linux - gdb

set follow-fork-mode child
set detach-on-fork off