在海思芯片上使用GDB远程调试

使用海思平台上(编译工具链:arm-himix200-linux)交叉编译 GDB 工具(使用版本8.2,之前用过10.2的版本,在编译 gdbserver 遇到编译出错的问题,因为关联了其他静态库等,尝试解决,但是遇到了一些其他问题,因为时间问题折腾了一段时间就放弃使用10.2的版本了)。

通过使用 gdb+gdbserver 远程调试目标板,之后可以通过 VSCode 配置好后实现和 IDE 集成开发环境一样的比较直观方便调试。

2.1 前期准备

1)下载 gdb(网上很多,搜素就能下载,我选择的是 gdb-8.2)

2)解压缩,输入指令解压 tar -vxzf gdb-8.2.tar.gz

3)进入解压后的目录中 cd gdb-8.2

2.2 环境配置

1)配置生成 Makefile 文件

./configure --target=arm-himix200-linux --prefix=~/gdbTool

–target=arm-himix200-linux 意思是说目标平台是运行于ARM体系结构的linux内核;
–program-prefix=arm-himix200-linux 是指生成的可执行文件的前缀,比如 arm-himix200-linux-gdb(可选参数)
–prefix= 是指生成的可执行文件安装在哪个目录,这个目录需要根据实际情况作选择。如果该目录不存在,会自动创建(当然,权限足够的话)

2)编译、安装

make & make install

会在–prefix 指定的目录下生成四个子目录:bin、include、lib 和 share,我们需要的 arm-himix200-linux-gdb 就在其中的bin目录下。

1)进入 gdbserver 目录下(不同的版本路径不一样,比如 gdb-8.2 的路径为 gdb-8.2/gdb/gdbserver,而 gdb-10.2 的路径为 gdb-10.2/gdbserver),则指令为 cd gdb/gdbserver

2)在 gdbserver 目录下配置生成 Makefile 文件

./configure --host=arm-himix200-linux --prefix=~/gdbTool

–host=arm-himix200-linux 指定了生成可执行文件运行的平台和系统:运行于ARM平台的Linux系统
–prefix= 是指生成的可执行文件安装在哪个目录

3)编译、安装(会在–prefix 指定的目录下生成 bin 目录,gdbserver 就在 bin 目录下)

make & make install

3.1 前期准备

将之前生成的 gdbserver 调试程序放在目标板上或者通过 nfs 方式运行也可以.这样就可以用 gdb 和 gdbserve 远程调用来调试目标板上的程序了。

一般情况 gdbserver 程序较大,所以建议采用 nfs 的方式挂载在目标板上运行较好,也可以通过 strip 减少 gdbserver 的大小(删除程序中符号表、调试符号表信息等)

3.2 执行 gdbserver

在目标板上运行需要调试的程序,如

./gdbserver --remote-debug 192.168.1.100:8005 test

192.168.1.100 为宿主机的 IP 地址; 8005 是用来作为 gdb 调试监听的端口,可自行设置;test 是编译好的目标板程序
(为了更好的使用 gdb 的调试功能, 在编译目标板程序时需加入 -g 选项

3.3 执行 gdb

1、在宿主机上运行 gdb 程序

./arm-himix200-linux-gdb test

arm-himix200-linux-gdb 是编译 gdb 生成安装在 bin 目录下的文件,名称可能因为设置了 –program-prefix 参数有所改变,test 是和目标板上的 test 一样的程序文件

2、进入 gdb 调试状态后,连接目标板

(gdb) target remote 192.168.1.102:8005

192.168.1.102 为目标板的 IP 地址,8005 则是 gdb 调试监听的端口

3、连接成功后则开始运行,宿主机之后根据 gdb 指令设置断点、单步调试等功能进行调试

(gdb) r

GDB常用的调试指令

GDB 调试器提供有大量的调试选项,可满足大部分场景中调试代码的需要。如表所示,罗列了几个最常用的调试指令(包含指令缩写)及各自的作用:

调试指令 作 用

(gdb) break xxx

(gdb) b xxx

在源代码指定的某一行设置断点,其中 xxx 用于指定具体打断点的位置。

(gdb) run

(gdb) r

执行被调试的程序,其会自动在第一个断点处暂停执行。

(gdb) continue

(gdb) c

当程序在某一断点处停止运行后,使用该指令可以继续执行,直至遇到下一个断点或者程序结束。

(gdb) next

(gdb) n

令程序一行代码一行代码的执行。

(gdb) print xxx

(gdb) p xxx

打印指定变量的值,其中 xxx 指的就是某一变量名。

(gdb) list

(gdb) l

显示源程序代码的内容,包括各行代码所在的行号。

(gdb) quit

(gdb) q

终止调试。

Original: https://www.cnblogs.com/const-zpc/p/16364427.html
Author: 大橙子疯
Title: 在海思芯片上使用GDB远程调试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715315/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows安装配置OpenGrok

    Windows安装配置OpenGrok 安装opengrok过程中遇到的问题:1.下载安装Ctags下载地址:https://github.com/universal-ctags/…

    技术杂谈 2023年5月31日
    067
  • 解决windows防火墙无法启动的问题

    windows防火墙突然无法开启,找个各种方法,最后还是通过微软自动的修复工具修复的: 网址如下: https://support.microsoft.com/zh-cn/mats…

    技术杂谈 2023年5月31日
    079
  • 聊聊AA实验的波动性

    当我们在实验评估系统上开启一个实验组和对照组配置一摸一样的实验时,我们称之为AA实验。AA实验通常用来辅助观察指标在产品不做改变时的偏差范围。我们通常会在实验里加一个和对照组一模一…

    技术杂谈 2023年5月31日
    077
  • Docker 部署 Kibana

    Docker 部署 Kibana 本篇主要介绍 使用 Docker 部署 kibana 用于操作 Elasticsearch 使用. 1. 前置准备 1.1 Elasticsear…

    技术杂谈 2023年7月10日
    056
  • spring-boot-导出excel-xlsx 文件损坏

    maven的pom文件处理 ①将resource标签配置如下 src/main/resources true bootstrap.yml **/*.xml **/excelTemp…

    技术杂谈 2023年7月25日
    071
  • [Pipy]利用pip2pi搭建本地pypi源

    当我们一个团队开发一个项目的时候,须要的Python第三方包基本是固定的。每次搭建新环境的时候总是由于各种内外网,https问题花费大量的时间来安装执行环境。 所以搭建一个本地的,…

    技术杂谈 2023年5月31日
    056
  • 入门Python,看完这篇就行了!

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/3bbc3146.html 你好,我是测试蔡坨坨。 众所周知,Python语法简洁、功能强大,通过简单的…

    技术杂谈 2023年7月11日
    088
  • 判断字符串是否为ISO编码,如果是则转换

    string test = @”已实缴”;// test = “南京不木人力资源有限公司”;if (IsValidISO…

    技术杂谈 2023年5月31日
    062
  • 2-第一个Django程序

    第一个Django程序 从本章节开始将通过实现一个投票应用程序,来让用户逐步的了解Django。这个程序由两步分组成: 公共站点,允许用户访问进行投票,和查看投票。 站点管理,允许…

    技术杂谈 2023年7月10日
    089
  • 《鹿柴》王维

    《鹿柴》王维 空山不见人,但闻人语响。 返景入深林,复照青苔上。 posted @2022-08-01 08:20 郑瀚Andrew 阅读(503 ) 评论() 编辑 Origin…

    技术杂谈 2023年5月31日
    084
  • 表单的子元素可不在form标签内

    表单是网页用于向服务器发送数据的元素。其用法类似下面: form标签对及其内部的所有子元素共同组成了表单。提交表单时,浏览器会将form标签对内所有具有name属性的标签的键值提交…

    技术杂谈 2023年7月23日
    054
  • 附加进程到远程服务器中Docker容器内调试

    很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS…

    技术杂谈 2023年7月23日
    088
  • 解决go-micro与其它gRPC框架之间的通信问题

    在之前的文章中分别介绍了使用gRPC官方插件和go-micro插件开发gRPC应用程序的方式,都能正常走通。不过当两者混合使用的时候,互相访问就成了问题。比如使用go-micro插…

    技术杂谈 2023年7月11日
    067
  • 一文读懂数据库发展史

    本文力求以简单易懂的语言描述出数据库发展史,尽量避免出现复杂的概念介绍。数据库演进史如图1所示: 图1 数据库演进 一、穿孔纸带和文件系统 在现代意义的数据库出现之前(20世纪60…

    技术杂谈 2023年7月25日
    088
  • 计算图像数据集的均值和方差(mean, std)用于transforms.Normalize()标准化

    Pytorch图像预处理时,通常使用transforms.Normalize(mean, std)对图像按通道进行标准化,即减去均值,再除以方差。这样做可以加快模型的收敛速度。其中…

    技术杂谈 2023年5月31日
    063
  • C/C++static

    static 是什么? static 是C++中的一个修饰符,它用来控制变量的存储方式和可见性。 为什么要用static 因为函数内部定义的变量,当程序执行到它的定义处时,编译器为…

    技术杂谈 2023年7月24日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球