windows下编译调试nginx

Posted 开发者易辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下编译调试nginx相关的知识,希望对你有一定的参考价值。


typora-copy-images-to: image

windows下编译调试nginx

linux使用gdb跟踪代码效率不高,在通过跟踪代码进行源码分析,与定位复杂逻辑问题时,如果有一个简单易用调试环境能极大提高效率。由于不想折腾linux的桌面系统,也担心x-window链接性能问题,顾考虑在windows下编译nginx并进行调试。

我使用的编译器是MinGW的gcc套件,界面使用VS code。

2篇核心的参考链接如下:

《Building nginx on the Win32 platform with Visual C》

《C/C++ for VS Code》

安装MinGW套件

下载安装地址:http://www.mingw.org/

下载安装后是一个MingGW Installation Manager,可以选择mingw32-base和msys-base两个包。

mingw32-base包括基本的gcc套件,msys-base有一些基本的linux命令工具,在后续执行configure时需要使用。

下载nginx源码与依赖库

下载源码必须通过http://hg.nginx.org/nginx 进行下载,不可使用发布的源码包,否则无法支持windows下编译。可以选择在网页下载或通过hg下载。

可以按 《Building nginx on the Win32 platform with Visual C》链接所示,现在依赖的第三方库。

如果仅作代码跟踪调试使用,可以先利用调整编译参数,去除对第三方库的依赖。下文提供的编译参数即不需要使用第三方库

编译nginx

解压源码后,启动MinGE的msys.bat,进入到源码目录,执行以下命令生成Makefile。msys执行configure的速度较慢,需要耐心等待。

./auto/configure \\
--with-cc=gcc \\
--with-cc-opt=-O0 \\
--with-debug \\
--prefix= \\
--conf-path=conf/nginx.conf \\
--pid-path=logs/nginx.pid \\
--http-log-path=logs/access.log \\
--error-log-path=logs/error.log \\
--sbin-path=nginx.exe \\
--http-client-body-temp-path=temp/client_body_temp \\
--http-proxy-temp-path=temp/proxy_temp \\
--http-fastcgi-temp-path=temp/fastcgi_temp  \\
--http-scgi-temp-path=temp/scgi_temp \\
--http-uwsgi-temp-path=temp/uwsgi_temp \\
--without-http_rewrite_module \\
--without-http_gzip_module \\
--with-select_module

我的脚本与官方链接中的几个区别:

  • 使用gcc作为编译器,而不是vs的cl
  • 增加-O0参数,方便代码跟踪调试
  • 没添加http_ssl_module、http_rewrite_module、http_gzip_module省去第三方库依赖

成功生成Makefile后通过执行make命令进行编译,编译的结果在objs\\nginx.exe

调试nginx

参考《C/C++ for VS Code》进行配置,配置launch.json文件。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/objs/nginx.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/objs",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:/MinGW/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

修改了模板中的program、cwd、miDebuggerPath三个参数。

为了调试nginx方便,可以配置nginx.conf中的以下几个参数。

daemon off;
master_process off;
worker_processes  1;

注意msys不支持动态断点,需要在启动调试前,或者调试状态下设置断点。

以上是关于windows下编译调试nginx的主要内容,如果未能解决你的问题,请参考以下文章

Windows下编译nginx-rtmp-module

Windows下编译nginx-rtmp-module

vscodevscode在windows与ubuntu下编译调试C/C++

ubuntu 12.04下编译安装nginx-1.9.3

FFmpeg之Linux下编译与调试

Windows 10 下编译 OpenJDK8