Linux教程网

如何使用vscode调试nginx

在 nginx 开发过程中,经常对其进行代码调试。通过调试不仅可以帮助我们快速定位问题,也可以帮助我们快速的学习和熟悉代码。

这篇文章来总结记录一下,如何使用 vscode 进行 nginx 开发调试。Nginx 虽然是跨平台,但一般我们是在 Linux 系统上进行开发和运行的,所以下边介绍的调试方式是基于远程 Linux 服务器进行调试的。

远程连接

我们要调试的是远程 Linux 服务器上的 nginx 程序,所以首先要先连接到远程服务器。在 vscode 上连接远程 Linux 服务器,需要安装 Remote-SSH 插件。

该插件的安装方法很简单,直接在 vscode 扩展功能中搜索 Remote-SSH 即可下载安装。

安装完成后,可以看到 vscode 左侧栏新增一个 Remote Explorer 功能图标。通过对应 + 新增按钮,输入远程 Linux 服务器的 SSH 信息即可远程连接

注:首次连接 Linux 服务器,需要初始化下载一些软件,速度可能会慢些,请耐心等待

远程调试

1. 安装依赖

我们要调试的是 nginx 程序,是用 C 语言写的,使用 vscode 调试程序本质上还是依赖于 gdb 调试器的,所以我们要先安装 gdb

1
$ apt-get install gdb -y

2. 安装必要的扩展

推荐安装 C/C++ 扩展

3. 远程调试

打开对应的 nginx 项目,因为是首次调试,所以需要通过菜单 RunAdd Configuration 添加调试相关的配置信息

会在 Linux 服务器下打开 .vscode/launch.json 文件,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"configurations": [
{
"name": "Launch",
// "preLaunchTask": "build",
"type": "cppdbg",
"request": "launch",
"program": "${cwd}/objs/nginx",
"args": ["-g", "master_process off;daemon off;"],
"stopAtEntry": false,
"cwd": "/root/nginx-1.22.1",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}

]
}
  • name 调试配置的名称,根据情况进行调整,一般默认即可
  • type 表示调试的程序类型,vscode 会根据代码类型自动判断,这里默认生成了 cppdbg 表示调试的是 C 程序
  • request 表示是启动程序,还是 attach 方式,我们一般是选择 launch
  • program 指定要调试的二进制程序,也就是二进制的路径
  • args 程序运行时的参数,如果没有参数可以不指定

其它参数,我们一般不用管,默认即可

对于调试 nginx 程序,我们一般要关闭守护进程和 Master 进程,所以需要修改 args 参数

1
["-g", "master_process off;daemon off;"]

上述信息配置完毕后,就可以按 F5 来使用调试的方式启动 Nginx 程序了,具体的调试用法在这里就不再详细赘述了。

注意,编译 nginx 时需要设置调试参数,方法很简单直接修改 objs/Makefile 中的 CFLAGS 变量

1
2
# 增加如下设置,再执行 make 进行编译
-g -O0 -gstabs

自动编译

我们一般在开发过程中进行调试,代码会经常需要修改测试,那就需要频繁手工进行执行编译 make 操作。vscode 提供了一种方式,允许在 launch 前执行一些操作,可以通过创建 Task 来完成,具体操作很简单。

通过菜单操作 TerminalConfigure Tasks,会打开文件 .vscode/tasks.json 内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make",
"args": [
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": "$gcc"
}
]
}
  • label 可以理解为名称,在 launch.json 需要指定
  • type 表示要执行任务的类型,shell 表示要执行 shell 脚本
  • command 就是我们要执行的 shell 命令,我们 nginx 编译时只需要 make 即可

上述其它参数,可以先不用管,按照上述配置即可

上述配置完之后,需要在 launch.json 配置中增加一项,表示在 launch 前执行名为 build 的 Task

1
2
3
{
"preLaunchTask": "build"
}

这样就大功告成了,赶快去修改下代码,重新按 F5 进入调试程序,看看自动编译的配置是否生效


专题:

本文发表于 2023-03-12,最后修改于 2024-04-04。

本站永久域名「 golinuxblog.com 」,也可搜索「 Linux教程网 」找到我。


上一篇 « 如何编译nginx第三方模块 下一篇 » VirtualBox虚拟机使用教程

推荐阅读

Big Image