GDB(the GNU Project Debugger)是 GNU 发布的一个功能强大的 UNIX 程序调试工具,
可以调试 Ada、 C、 C++、 Objective-C 和 Pascal 等多种语言的程序,可以在大多数 UNIX 和
Microsoft Windows 变种上运行。 GDB 既可以在本地调试,也可以进行远程调试。
通过 GDB 能够对程序进行如下调试:
● 运行程序,还可以给程序加上某些参数,指定程序的行为。
● 使程序在特定的条件下停止。
● 检查程序停止时的运行状态。
● 改变程序的参数,以纠正程序中的错误。
需要使用 GDB 调试的程序,在编译的时候必须加-g 参数,开启调试信息。如果没开启无法使用断点或其他功能。
进行嵌入式 Linux 开发, 更多的是进行 GDB 远程调试。 GDB 远程调试与本地调试相比,多了远程连接这一步。远程部分我们使用vscode完成软件编写与调试。
GDB 远程调试需要两个程序,一个是目标机的 GDBServer,另一个是运行于本地机器
的与之对应的 GDB,对于 ARM 嵌入式 Linux 而言,通常是 arm-linux-gdb。远程系统和本地
系统之间通过网线连接。
进行远程 GDB 调试, 首先需要在目标系统中启动 gdbserver, 这就要求部署的目标板文
件系统必须包含有 gdbserver 程序, 否则远程 GDB 调试将无法进行, 这里假定目标板包含
gdbserver 程序。
如启动需要调试的程序:
gdbserver 192.168.2.251:2000 udp_server
//192.168.2.251:2000 表示ubuntu16的IP与端口
//udp_server 是可执行的应用程序
可以看到执行后,启动等待远程连接。
步骤如下:
vscode 需要安装好插件 Remote Development 。
vscode 打开工程文件
编译的时候 生产的目标文件需要 把调试信息加载进来。 -g
点击“调试 ”->“打开配置”,然后选择“ C++(GDB/LLDB)”选项,然后会在 .vscode文件夹下生成launch.json文件
修改文件参考如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "udp_server",
"type": "cppdbg",
"request": "launch",
"program": "/home/vmuser/app/udp/udptest/udp_server",
"args": [],
"stopAtEntry": false,
"cwd": "/home/vmuser/app/udp/udptest",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb",
//"miDebuggerPath": "/opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi",
"miDebuggerServerAddress": "192.168.2.96:2000"
}
]
}
①、name:调试的项目名
②、program:需要调试的应用程序可执行文件路径。
③、cwd:需要调试的应用程序源码路径。
④、miDebuggerPath:此项需要手动添加,用于指定所使用的交叉编译器 gdb路径。
⑤、miDebuggerServerAddress:此项需要手动添加,远程 gdbserver服务器地址,也就是开发板地址
点击 VSCode上的“调试” ”->“启动调试”按钮开启调试
控制程序运行。
简单记录一下
本文参考:嵌入式VSCode+gdbserver图形化调试环境搭建与使用_hurryddd的博客-CSDN博客_gdbserver vscode