一、原理
嵌入式系统中一般在 PC端运行 gdb工具,源码也是在 PC端,源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver,通过网络与 PC端的 gdb进行通信。因此要想在 PC上通过 gdb调试嵌入式程序,那么需要两个东西:gdb和gdbserver,其中 gdb是运行在 PC上的, gdbserver需要我们移植到开发板上。
二、环境搭建
1、VSCode设置
1、给 VScode安装远程调试插件“ Remote Development”,点击“调试 ”->“打开配置”,然后选择“ C++(GDB/LLDB)”选项,然后会在 .vscode文件夹下生成launch.json文件
需要修改的内容:
①、name:调试的项目名
②、program:需要调试的应用程序可执行文件路径。
③、cwd:需要调试的应用程序源码路径。
④、miDebuggerPath:此项需要手动添加,用于指定所使用的交叉编译器 gdb路径。
⑤、miDebuggerServerAddress:此项需要手动添加,远程 gdbserver服务器地址,也就是开发板地址
修改后的launch.json文件如下,注意这些内容要根据自己的情况来修改,仅供参考!!
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gdbtest",
"type": "cppdbg",
"request": "launch",
"program": "/home/denghengli/linux/IMX6ULL/linux_driver/0_gdbtest/gdbtest",
"args": [],
"stopAtEntry": false,
"cwd": "/home/denghengli/linux/IMX6ULL/linux_driver/0_gdbtest",
"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",
"miDebuggerServerAddress":"192.168.0.20:2000"
}
]
}
2、gdbserver安装
一般交叉编译已经自带了 gdb和 gdbserver,可以不用移植,直接使用交叉编译器自带的即可,直接将gdbserver拷贝到根文件系统的 /usr/bin 目录下,开发板启动以后通过nfs服务使用ubuntu下的跟文件系统;如果交叉编译器没有自带则需要下载源码进行安装
1、交叉编译器自带
gdbserver的安装目录:
将gdbserver拷贝到rootfs根文件系统 /usr/bin 中:
sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/gdbserver /home/denghengli/linux/nfs/rootfs/usr/bin/
2、源码下载安装步骤
我没有用源码安装过,所以就略过了吧。。。
三、调试过程
1、将源码编译成带调试信息的可执行文件,然后拷贝到开发板上。比如在ubuntu下编写了一个gdbtest.c文件,编译完成以后将得到的gdbtest可执行文件发送到开发板中
#include
#include
int main(int argc, char *argv[])
{
unsigned int times = 0;
while (1)
{
printf("runging times: %d rn", times);
times++;
sleep(1);
}
}
编译:
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意 -g选项 拷贝至rootfs根文件系统下(开发板启动以后通过nfs服务使用ubuntu下的跟文件系统):
sudo cp gdbtest /home/denghengli/linux/nfs/rootfs/lib/modules/4.1.15/
2、在开发板中,启动gdbserver并执行要调试的执行文件
gdbserver 192.168.0.107:2000 gdbtest //启动开发板上的 gdbserver
192.168.0.107为指定的ubuntu主机ip
2000为要开启调试的端口
gdbtest为调试的可执行文件,一定要带上gdbtest的路径!!
3、点击 VSCode上的“调试” ”->“启动调试”按钮开启调试
4、控制程序运行
一、原理
嵌入式系统中一般在 PC端运行 gdb工具,源码也是在 PC端,源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver,通过网络与 PC端的 gdb进行通信。因此要想在 PC上通过 gdb调试嵌入式程序,那么需要两个东西:gdb和gdbserver,其中 gdb是运行在 PC上的, gdbserver需要我们移植到开发板上。
二、环境搭建
1、VSCode设置
1、给 VScode安装远程调试插件“ Remote Development”,点击“调试 ”->“打开配置”,然后选择“ C++(GDB/LLDB)”选项,然后会在 .vscode文件夹下生成launch.json文件
需要修改的内容:
①、name:调试的项目名
②、program:需要调试的应用程序可执行文件路径。
③、cwd:需要调试的应用程序源码路径。
④、miDebuggerPath:此项需要手动添加,用于指定所使用的交叉编译器 gdb路径。
⑤、miDebuggerServerAddress:此项需要手动添加,远程 gdbserver服务器地址,也就是开发板地址
修改后的launch.json文件如下,注意这些内容要根据自己的情况来修改,仅供参考!!
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gdbtest",
"type": "cppdbg",
"request": "launch",
"program": "/home/denghengli/linux/IMX6ULL/linux_driver/0_gdbtest/gdbtest",
"args": [],
"stopAtEntry": false,
"cwd": "/home/denghengli/linux/IMX6ULL/linux_driver/0_gdbtest",
"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",
"miDebuggerServerAddress":"192.168.0.20:2000"
}
]
}
2、gdbserver安装
一般交叉编译已经自带了 gdb和 gdbserver,可以不用移植,直接使用交叉编译器自带的即可,直接将gdbserver拷贝到根文件系统的 /usr/bin 目录下,开发板启动以后通过nfs服务使用ubuntu下的跟文件系统;如果交叉编译器没有自带则需要下载源码进行安装
1、交叉编译器自带
gdbserver的安装目录:
将gdbserver拷贝到rootfs根文件系统 /usr/bin 中:
sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/gdbserver /home/denghengli/linux/nfs/rootfs/usr/bin/
2、源码下载安装步骤
我没有用源码安装过,所以就略过了吧。。。
三、调试过程
1、将源码编译成带调试信息的可执行文件,然后拷贝到开发板上。比如在ubuntu下编写了一个gdbtest.c文件,编译完成以后将得到的gdbtest可执行文件发送到开发板中
#include
#include
int main(int argc, char *argv[])
{
unsigned int times = 0;
while (1)
{
printf("runging times: %d rn", times);
times++;
sleep(1);
}
}
编译:
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意 -g选项 拷贝至rootfs根文件系统下(开发板启动以后通过nfs服务使用ubuntu下的跟文件系统):
sudo cp gdbtest /home/denghengli/linux/nfs/rootfs/lib/modules/4.1.15/
2、在开发板中,启动gdbserver并执行要调试的执行文件
gdbserver 192.168.0.107:2000 gdbtest //启动开发板上的 gdbserver
192.168.0.107为指定的ubuntu主机ip
2000为要开启调试的端口
gdbtest为调试的可执行文件,一定要带上gdbtest的路径!!
3、点击 VSCode上的“调试” ”->“启动调试”按钮开启调试
4、控制程序运行
举报