ignoreFailures : true } ] } ] } 修改了模板中的program、cwd、miDebugg

时间:2021-09-29 07:37:20

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套件

下载安置地点:

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

ignoreFailures : true } ] } ] } 修改了模板中的program、cwd、miDebugg

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

下载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不撑持动态断点,需要在启动调试前,或者调试状态下设置断点。