VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序
创始人
2024-03-14 13:31:32
0

基本流程跟我的另一篇文章《VsCode + gdb + gdbserver远程调试C++程序》一样,不一样的是需要重新编译gdb和交叉编译gdbserver。

一、准备工作

sudo apt install libgmp-dev

如果不安装,编译gdb时可能会报错:configure: error: GMP is missing or unusable

由于我的嵌入式交叉编译工具链在/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/platform/buildroot/output/rockchip_rk3568_itc/host/bin下。

所以设置环境变量:

su
vim /etc/bash.bashrc

在最后一行添加:

export PATH=$PATH:/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/platform/buildroot/output/rockchip_rk3568_itc/host/bin

执行命令使环境变量生效:

source /etc/bash.bashrc

执行上述命令成功后如果执行:

echo $PATH

控制台输出有刚刚配置的编译链路径,则表明环境变量设置成功了。

继续执行命令:

aarch64-buildroot-linux-gnu-gcc -v

正常会显示当前安装版本编号

二、下载编译gdb

Index of /gnu/gdb 下载最新的gdb源码。比如:gdb-12.1.tar.gz。

tar -xzvf gdb-12.1.tar.gz
cd gdb-12.1
./configure --target=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gdb/gdb-12.1/install
make
make install

注意这里因为我的编译工具链是aarch64-buildroot-linux-gnu,所以configure的时候加的target选项是--target=aarch64-buildroot-linux-gnu。如果你的工具链是其它则configure的时候要同步修改。

完成后可以看到在/home/lwf/workplace3/lib/gdb/gdb-12.1/install目录下生成了可执行文件aarch64-buildroot-linux-gnu-gdb。注意等下远程调试的时候这个gdb是运行在我们虚拟机(本机)的linux上的。我们先把这个aarch64-buildroot-linux-gnu-gdb备份到别的目录。

二、编译gdbserver

首先得交叉编译gmp。到官网https://gmplib.org/index 下载最新的gmp源码

 

执行命令:

apt-get install lzip
lzip -k -d gmp-6.2.1.tar.lz
tar xvf gmp-6.2.1.tar
cd gmp-6.2.1
mkdir install
./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install
make
make install

执行完后会在/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install生成gmp的库和头文件

 

删掉gdb源码目录,重新解压、configure、make

rm -r gdb-12.1
tar -xzvf gdb-12.1.tar.gz
cd gdb-12.1
mkdir install
./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gdb/gdb-12.1/install CFLAGS="-I/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/include -L/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/lib" CXXFLAGS="-I/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/include -L/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/lib"
make
make install

完成后可以看到/home/lwf/workplace3/lib/gdb/gdb-12.1/install/bin下生成了gdbserver 

三、远程调试

将gdbserver拷贝到嵌入式板子上,执行

gdbserver 172.16.25.235:2000 ./App

其中App为要调试的程序的路径

vscode根据 《VsCode + gdb + gdbserver远程调试C++程序》里面的那样配置。然后修改.vscode/launch.json

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "g++ - 生成和调试活动文件","type": "cppdbg","request": "launch","program": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app/App","stopAtEntry": false,"cwd": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ 生成活动文件","miDebuggerPath": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app/Tool/aarch64-buildroot-linux-gnu-gdb","miDebuggerServerAddress":"172.16.53.157:2000",}]
}

其中"program"是要被调试的程序在vmware中的路径

"cmd"是要被调试的程序在vmware中的目录

"miDebuggerPath" 是我们刚刚编译出来的aarch64-buildroot-linux-gnu-gdb在vmware中的路径

"miDebuggerServerAddress"对应我们刚刚在板子上执行的gdbserver指令

配置好后,vscode点击F5,即可实现远程调试

 

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...