📢 前言
如何在远程服务器上安装GDB server,并在 VS Code 配置launch.json
连接远程调试。
🖥️ 1. 在远程服务器上安装GDB server,配置launch.json连接远程调试
远程调试的核心思想是将代码的编辑与调试分开:
-
本地(你的电脑):使用VS Code编辑代码并控制调试过程。
-
远程(服务器):实际运行代码并通过GDB server提供调试支持。
为了实现这一功能:
-
GDB server 是一个在远程服务器上运行的程序,它负责执行你的代码并接受本地调试工具的指令。
-
launch.json
是VS Code中的调试配置文件,用于告诉VS Code如何连接到远程的GDB server并控制调试。
小贴士
换句话说,你在远程服务器上安装并运行GDB server,让它监听某个端口(例如1234),然后在本地通过launch.json
配置VS Code,使其通过网络连接到该端口,从而实现远程代码的调试。这种方式特别适用于嵌入式开发或需要在远程服务器上运行代码的场景。
🔑 2. 实操步骤
以下是具体的操作流程,确保你能够从零开始设置并运行远程调试。
1. 在远程服务器上安装GDB server
-
检查是否已安装:
- 在远程服务器上,打开终端,输入以下命令检查GDB server是否可用:
gdbserver --version
-
如果返回版本信息,说明已安装;否则需要安装。
- 在远程服务器上,打开终端,输入以下命令检查GDB server是否可用:
-
安装GDB server(以Linux服务器为例):
- 对于Ubuntu/Debian系统,运行:
sudo apt-get update sudo apt-get install gdbserver
- 对于CentOS/RHEL系统,运行:
sudo yum install gdb-gdbserver
-
如果是其他系统或嵌入式设备,可能需要下载源码并编译安装(例如交叉编译适用于ARM设备的GDB server)。
- 对于Ubuntu/Debian系统,运行:
-
验证安装:
-
安装完成后再次运行
gdbserver --version
,确保安装成功。
-
2. 上传代码并启动GDB server
-
上传代码到远程服务器:
- 使用
scp
命令将本地代码上传到服务器。例如:scp your_program user@remote_host:/path/to/destination
-
your_program
是你编译好的可执行文件。 -
user@remote_host
是远程服务器的用户名和地址(例如user@192.168.1.100
)。 -
/path/to/destination
是远程服务器上的目标路径。
-
-
或者,你可以使用VS Code的“Remote - SSH”插件直接在远程服务器上编辑和操作代码。
- 使用
-
启动GDB server:
-
登录远程服务器(可以用
ssh user@remote_host
),进入代码所在目录。 - 运行以下命令启动GDB server:
gdbserver :1234 your_program
-
:1234
是GDB server监听的端口号,可以根据需要改为其他未被占用的端口。 -
your_program
是你的可执行程序名称。
-
- 启动成功后,你会看到类似以下输出:
这表示GDB server已运行并等待本地连接。Listening on port 1234
-
3. 在本地VS Code中配置launch.json
-
创建
launch.json
:-
打开VS Code,在你的项目文件夹中:
-
1. 点击左侧的“调试”图标(形似播放按钮)。
-
2. 点击“创建 launch.json 文件”。
-
3. 选择“C++ (GDB/LLDB)”环境,然后选择“gdb”作为调试器。
-
-
VS Code会生成一个默认的
launch.json
文件。
-
-
编辑
launch.json
:- 将其修改为以下内容,以连接远程GDB server:
{ "version":"0.2.0", "configurations":[ { "name":"Remote Debug", "type":"cppdbg", "request":"launch", "program":"/path/to/your_program_on_remote", "args":[], "stopAtEntry":false, "cwd":"/path/to/your_program_on_remote", "environment":[], "externalConsole":false, "MIMode":"gdb", "miDebuggerPath":"/usr/bin/gdb", "miDebuggerServerAddress":"remote_host:1234", "setupCommands":[ { "description":"Enable pretty-printing for gdb", "text":"-enable-pretty-printing", "ignoreFailures":true } ] } ] }
-
关键字段说明:
-
"program"
:远程服务器上可执行文件的完整路径,例如/home/user/your_program
。 -
"cwd"
:远程服务器上的工作目录,通常与program
路径一致。 -
"miDebuggerServerAddress"
:远程服务器的IP地址和GDB server端口,例如192.168.1.100:1234
。 -
"miDebuggerPath"
:本地GDB的路径,通常是/usr/bin/gdb
(Linux/Mac)或交叉编译的GDB路径(例如针对ARM设备的arm-none-eabi-gdb
)。
-
- 将其修改为以下内容,以连接远程GDB server:
4. 启动调试
-
确保网络连通:
-
确认本地和远程服务器之间的网络连接正常,且端口(例如1234)未被防火墙阻挡。
-
-
运行调试:
-
在VS Code中:
-
选择“调试”面板中的“Remote Debug”配置。
-
点击“开始调试”按钮(绿色播放按钮)或按
F5
。
-
-
VS Code会连接到远程GDB server,开始调试。你可以在VS Code中设置断点、查看变量值、单步执行代码等。
-
🚀 示例:调试远程服务器上的程序
假设:
-
远程服务器IP为
192.168.1.100
。 -
程序名为
my_app
,位于远程路径/home/user/my_app
。 - 你已在远程服务器上运行:
gdbserver :1234 /home/user/my_app
本地launch.json
配置如下:
{
"version":"0.2.0",
"configurations":[
{
"name":"Remote Debug",
"type":"cppdbg",
"request":"launch",
"program":"/home/user/my_app",
"args":[],
"stopAtEntry":false,
"cwd":"/home/user",
"environment":[],
"externalConsole":false,
"MIMode":"gdb",
"miDebuggerPath":"/usr/bin/gdb",
"miDebuggerServerAddress":"192.168.1.100:1234",
"setupCommands":[
{
"description":"Enable pretty-printing for gdb",
"text":"-enable-pretty-printing",
"ignoreFailures":true
}
]
}
]
}
启动调试后,你就可以在VS Code中控制my_app
的执行了。
👉 注意事项
-
网络问题:如果连接失败,检查防火墙设置或使用
ping remote_host
测试连通性。 -
权限:确保远程服务器上
your_program
和GDB server有执行权限(可以用chmod +x
赋予权限)。 -
调试符号:如果程序没有调试信息(例如未用
-g
编译),可能无法查看变量或设置断点。
🔒 总结
通过在远程服务器上安装并运行GDB server,然后在VS Code的launch.json
中配置连接,你可以实现本地编辑、远程调试的无缝体验。这种方法简单高效,适用于各种开发场景。
如果这篇文章对你有帮助,记得点赞👍+ 关注
关注公众号,获取更多资讯、嵌入式开发技巧和技术干货!🌱