VSCode GDB远程嵌入开发板调试

VSCode GDB远程嵌入式开发板调试

一、原理

嵌入式系统中一般在 PC端运行 gdb工具,源码也是在 PC端,源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver,通过网络与 PC端的 gdb进行通信。因此要想在 PC上通过 gdb调试嵌入式程序,那么需要两个东西:gdb和gdbserver,其中 gdb是运行在 PC上的, gdbserver需要我们移植到开发板上。

二、环境搭建

环境介绍:

VSCode 安装在windows上,windows上虚拟机有源代码,使用VSCode 远程虚拟机的需要安装 Remote-Develop相关插件,在虚拟机上编译,在板子上启动gdb server,通过VSCode 启动虚拟机里面的gdb 挂在到板子上进行远程调试。

1、VSCode设置

1、给 VScode安装远程调试插件" Remote Development",点击**"调试 "->"打开配置",然后选择" C++(GDB/LLDB)"选项,然后会在 .vscode文件夹下生成launch.json**文件

需要修改的内容:

①、name:调试的项目名

②、program:需要调试的应用程序可执行文件路径。

③、cwd:需要调试的应用程序源码路径。

④、miDebuggerPath:此项需要手动添加,用于指定所使用的交叉编译器 gdb路径。

⑤、miDebuggerServerAddress:此项需要手动添加,远程 gdbserver服务器地址,也就是开发板地址

修改后的launch.json文件如下,注意这些内容要根据自己的情况来修改,仅供参考!!

cpp 复制代码
{
        "version": "0.2.0",
        "configurations": [
            {
                "name": "gdbtest",
                "type": "cppdbg",
                "request": "launch",
                "program": "/mnt/hgfs/Work/dm1616-server/dm1616-server/dm1616/Builds/LinuxMakefile/build/dm1616", // 虚拟机上交叉编译的程序
                "args": [],
                "stopAtEntry": false,
                "cwd": "/mnt/hgfs/Work/dm1616-server/dm1616-server", // 虚拟机上源代码的目录
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "miDebuggerPath":"/home/hs/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb", // 虚拟机上交叉编译环境的gdb
                "miDebuggerServerAddress":"192.168.2.62:2000" // 板子上gdb server的ip端口
            }
        ]
    }
}

2、gdbserver安装

一般交叉编译已经自带了 gdb和 gdbserver,可以不用移植,直接使用交叉编译器自带的即可,直接将gdbserver拷贝到根文件系统的 /usr/bin 目录下,开发板启动以后通过nfs服务使用ubuntu下的跟文件系统;如果交叉编译器没有自带则需要下载源码进行安装

1、交叉编译器自带

gdbserver的安装目录:(一般在交叉编译工具链的bin目录下)

2、将gdb server 拷贝到板子上,可以自行拷贝使用xftp

cpp 复制代码
// scp [虚拟机编译程序路径] [板子用户名]@[板子ip]:[板子需要拷贝的路径]
scp /mnt/hgfs/Work/dm1616-server/dm1616-server/dm1616/Builds/LinuxMakefile/build/dm1616 root@192.168.2.62:/home/root/hs@hs:/mnt/hgfs/Work/dm1616-server/dm1616-server

三、调试过程

1、将源码编译成带调试信息的可执行文件,然后拷贝到开发板上。比如在ubuntu下编写了一个gdbtest.c文件,编译完成以后将得到的gdbtest可执行文件发送到开发板中

cpp 复制代码
#include <stdio.h>
#include <unistd.h>
 
int main(int argc, char *argv[])
{
	unsigned int times = 0;
 
	while (1)
	{
		printf("runging times: %d \r\n", times);
		times++;
		sleep(1);
	}
}

编译:

cpp 复制代码
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意 -g选项

拷贝至rootfs根文件系统下(开发板启动以后通过nfs服务使用ubuntu下的跟文件系统):

cpp 复制代码
sudo cp gdbtest /home/denghengli/linux/nfs/rootfs/lib/modules/4.1.15/

2、在开发板中,启动gdbserver并执行要调试的执行文件

cpp 复制代码
gdbserver 192.168.0.107:2000 gdbtest //启动开发板上的 gdbserver

192.168.0.107为指定的ubuntu主机ip

2000为要开启调试的端口

gdbtest为调试的可执行文件,一定要带上gdbtest的路径!!

3、点击 VSCode上的"调试" "->"启动调试"按钮开启调试

4、控制程序运行

四、调试过程中的问题

1. libncurses.so.5: cannot open shared no such file

cpp 复制代码
sudo apt-get install  libncurses5

2. libpython2.7:cannot open shared no such file

cpp 复制代码
 sudo apt-get install libpython2.7

sudo apt-get install libncurses5

复制代码
## 2. libpython2.7:cannot open shared no such file

```cpp
 sudo apt-get install libpython2.7

参考地址:https://www.cnblogs.com/lidabo/p/16370663.html

相关推荐
山峰哥9 天前
吃透 SQL 优化:告别慢查询,解锁数据库高性能
服务器·数据库·sql·oracle·性能优化·编辑器
Diligently_9 天前
idea 中vm option 配置
java·ide·intellij-idea
holeer9 天前
【V1.0】Typora 中的 HTML 支持|软件文档自翻译
前端·编辑器·html·typora·web·markdown·文档
我命由我123459 天前
在 Android Studio 中,新建 AIDL 文件按钮是灰色
android·ide·android studio·安卓·android jetpack·android-studio·android runtime
硬汉嵌入式9 天前
Vim 9.2版本正式发布
编辑器·vim
Hello World . .9 天前
Linux:线程间通信
linux·开发语言·vscode
AC赳赳老秦9 天前
云原生AI故障排查新趋势:利用DeepSeek实现高效定位部署报错与性能瓶颈
ide·人工智能·python·云原生·prometheus·ai-native·deepseek
被制作时长两年半的个人练习生9 天前
claude code for vscode 配置 qwen3.5
ide·vscode·claude code·qwen3.5
圣心9 天前
Visual Studio Code 中的 AI 智能操作
ide·人工智能·vscode
吹牛不交税9 天前
关于vscode左侧资源管理器目录层级疑似异常的问题
ide·vscode·编辑器