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