美文网首页理解Nginx源码
MacOS中使用VSCode调试Nginx

MacOS中使用VSCode调试Nginx

作者: seawish | 来源:发表于2018-12-20 20:39 被阅读31次

    一. 编译运行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.png

    2. 修改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.png

    4. 断点调试,在解析 Http 请求处打断点,刷新浏览器

    image.png

    参考文献


    本文作者: seawish
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

    相关文章

      网友评论

        本文标题:MacOS中使用VSCode调试Nginx

        本文链接:https://www.haomeiwen.com/subject/risckqtx.html