一. 编译运行Nginx
详细过程可参考博文:Nginx源码编译安装教程
配置调试功能
一定要开启Nginx调试功能:
修改 ./auto/cc/conf :
ngx_compile_opt="-c" 改为 ngx_compile_opt="-c -g"
安装Nginx
cd nginx-1.10.3
sudo ./configure --prefix=/usr/local/nginx --with-stream --with-debug
sudo make
sudo make install
更改Nginx程序目录权限
必须修改文件夹权限,要不然VScode将没有权限启动Nginx。
Nginx安装目录为configure命令中--prefix所设置的目录:
sudo ./configure --prefix=/usr/local/nginx --with-stream --with-debug
修改文件夹权限:
chmod -R 777 /usr/local/nginx
配置nginx.conf
需要关闭Nginx守护进程运行方式,从而保证每次关闭debugger都能关闭nginx服务。
- 切记不可以关闭master_process,不然master进程和worker进程将为同一进程,并且无法调试nginx工作进程。
- worker_processesss设为1,方便调试。
在/conf/nginx.conf 中修改如下:
daemon off;
#master_process off;
worker_processes 1;
二. 调试Master进程
1. 添加VSCode调试配置
在Nginx中打开Nginx源码,并添加调试配置,如下图。
image.png2. 修改launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
// 调试nginx Master进程
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/objs/nginx",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb"
}
]
}
3. 启动调试
image.png三. 调试Worker进程
1. 查看Worker进程id
zsbmac% ps -ef | grep nginx
502 80322 80311 0 8:27下午 ttys008 0:00.00 grep nginx
502 80316 80318 0 8:27下午 ttys009 0:00.01 nginx: master process /Users/zsb/Documents/Workspaces/nginx-dev/nginx-1.10.3/objs/nginx
502 80320 80316 0 8:27下午 ttys009 0:00.00 nginx: worker process
2. 编辑launch.json
增加工作进程的调试配置:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
// 监听工作进程
{
"name": "(lldb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/objs/nginx",
"processId": "80320", // 填写 Worker 进程 PID
"MIMode": "lldb"
},
// 启动nginx
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/objs/nginx",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb"
}
]
}
3. 切换debug模式为attach
image.png4. 断点调试,在解析 Http 请求处打断点,刷新浏览器
image.png参考文献
本文作者: seawish
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
网友评论