基本流程跟我的另一篇文章《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,即可实现远程调试

值得注意的是:要被调试的可执行文件一定得带调试信息。用file命令可以看到其是否携带调试信息:

如果没有,确保使用gcc/g++编译的时候有加"-g"选项。并且不要加"--only-keep-debug"和" --strip-debug"选项

VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序相关推荐

  1. eclipse gdb gdbserver 远程调试

    https://blog.csdn.net/linuxarmsummary/article/details/44975495 我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.0 ...

  2. 使用gdbserver远程调试

    使用gdbserver远程调试   1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1 下载地址:http://ft ...

  3. 【嵌入式】Linux开发工具gdb及远程调试

    gdb及远程调试 gdb gdb安装 gdb调试命令 gdb 调试步骤 嵌入式远程调试 在开发板上运行 gdbserver 在PC端执行 其他Liunx开发工具 交叉反汇编器 arm-linux-ob ...

  4. gdb的简单使用和gdb+gdbserver方式进行ARM程序调试

    gdb的简单使用 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB ...

  5. vscode使用wsl远程调试linux代码

    vscode现在可以使用远程调试功能 ,可以通过ssh连接远程服务器,使用容器或者使用wsl,本地vscode作为人机接口,实际的代码和调试程序都在远程运行. 现在将我使用wsl过程和碰到的问题记录下 ...

  6. Ubuntu和Mac使用gdbserver远程调试android源码

    一.gdbserver在android上远程调试进程 0.关闭Enforcing # adb shell setenforce 01.拷贝gdb和gdbserver文件 <1>PC端为Cl ...

  7. gdbserver远程调试

    1.1 嵌入式设备gdbserver远程调试 在一些资源比较小的嵌入式设备,比如IPC设备,发生了段错误之后,无法在本地gdb,如果这个段错误比较容易复现,gdbserver此时主能发挥最大用处. 1 ...

  8. ARM嵌入式Linux系统设计与开发

    ARM嵌入式Linux系统设计与开发 基本信息 作者: 俞辉    李永    刘凯    王晓虹    丛书名: 高等院校计算机教材系列 出版社:机械工业出版社 ISBN:9787111300045 ...

  9. arm嵌入式linux应用实例开发pdf,零点起步——ARM嵌入式Linux应用开发入门一书的源代码...

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 文件      2 ...

最新文章

  1. php设置ip,使用PHPIP的IP管理
  2. linux 源码 调试,开发一个Linux调试器(六):源码级逐步执行
  3. oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念
  4. python文件操作模式是什么,python --文件操作模式详解
  5. 【算法分析与设计】习题分享
  6. mysql支持arm64架构吗_ARM架构下面安装mysql5.7.22
  7. java赋值语句_深度分析:面试阿里,字节99%会被问到Java类加载机制和类加载器...
  8. execve系统调用_Linux操作系统中的namespace是个什么鬼
  9. linux mysql emoji_Linux宝塔面板MySQL存储emoji,非服务器命令方法
  10. mysql性能剖析工具_MySQL性能剖析工具(pt-query-digest)【转】
  11. 深入理解uwsgi和gunicorn网络模型
  12. 查看iOS App的bundleId
  13. 神州笔记本T6TI-X5黑苹果10.13.6安装教程 i5 7300HQ +HD630+alc269
  14. html5读取umd,教程:使用umd、commonjs和es三种模式制作自己的React 组件(库)
  15. 中国邮路算法(中国邮递员问题)(详细)
  16. java的一些学习网址。。。。。
  17. 介绍一个免费的开源网站(BootCDN)
  18. Use Goldengate Initial Data Load
  19. 深入理解Android相机体系结构
  20. 小米手机刷机失败补救方法详解

热门文章

  1. Hadoop集群搭建(英文官网翻译)
  2. chapter10_通过Spring和JDBC征服数据库_2_配置数据源
  3. 开源模板语言Liquid
  4. [league/glide]两行代码实现一套强大的图片处理HTTP服务
  5. java protect private_java基础篇之 public、private、protect、default的区别
  6. C++ stringstream 字符串格式化与格式转换方法
  7. 父母的10种行为会导致孩子不自信
  8. 计算机行业应该具备的技能,计算机专业课程安排 要掌握哪些技能
  9. SCL语言的循环结构
  10. Android P版本非SDK接口管控特性,参考华为