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

1 前言

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

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


2 编译

2.1 前期准备

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

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

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

2.2 环境配置

2.2.1 编译 gdb

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目录下。

2.2.2 编译 gdbserver

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 使用步骤

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

终止调试。

原文 ***blogs.com/const-zpc/p/16364427.html

本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023-03-08 15:05
下一篇 2023-03-09 09:38

相关推荐

  • 怎么样才能养好热带鱼,怎样养好热带鱼鹦鹉鱼

    热带鱼以“娇”著称,其对生活环境要求较高,目前只有200余种能在水族箱中进行饲养,100余种能进行人工繁殖,它们的繁殖方式又因品种而大不相同,这使众多的热带鱼养殖的爱好者望鱼兴叹。…

    2023-04-29
  • 马克思主义基本原理共产主义理想

    《马克思主义哲学原理》共产主义社会的三大基本特征 共产主义社会的基本特征如下: 一是物质财富极大丰富,消费资料按需分配。 社会生产力高度发展,社会财富极大丰富;彻底废除私有制,实行…

    2023-04-04
  • 芬兰语言,芬兰:瑞典语人口仅占全国5%,为何却能成为官方语言之一?

    在欧洲,面积较大的国家几乎都是单一民族占主导地位的国家,因此一般而言其官方语言只有一种。只有在一些面积较小,并且由多民族构成的国家才拥有多种官方语言,比如瑞士有四种官方语言,比利时…

    2022-12-03
  • ccie可以自学吗

    逝者如斯夫,不舍昼夜。转眼已到而立之年。最近工作生活当中时常有人问我网络工程师的路还能不能走,学习CCNA是否还有价值,该如何学习如何备考。于是花了一些时间把这几年学习工作中的经验…

    用户投稿 2022-12-17
  • 延禧攻略里的顺嫔是好是坏

    顺嫔的美貌令整个后宫的女人嫉妒,更是把原本在圆明园陪伴太后的魏璎珞大大给直接逼回了宫!不回宫不行了啊,再不回来,后宫就快没有令妃这个人了。 终于,我们的令妃娘娘回来了! 眉间一颗泪…

    2022-11-25
  • 背光对比度亮度色彩色调锐度怎么调

    在对照片进行处理时,你很少能绕开对色彩以及色调的优化或者修改。如果说这种处理为照片处理者提供了巨大的创作空间,那么我们也可以说它是几乎所有的照片处理都要求有的最基本的步骤。 因为一…

    2023-11-30
  • 95580

    视频加载中…   一腔忠魂卫长空,一生戎马护旗红。人民空军犹如战鹰翱翔空天,身似猛虎筑起空中防线。   在第95个“八一”建军节来临之际,解放军95580部队全体官兵向…

    2022-11-17
  • 什么是公益

    公益 是指那些非盈利性和具有社会效益性的项目。 公益性项目是以谋求 社会效应 为目的,具有一般规模大,投资多,受益面宽,服务年限长,影响深远等特点的投资项目。现阶段关于公益性项目的…

    2023-08-21
  • 怎样能从零基础快速学韩语

    第一步 开启你的学习之路吧! 1.学习韩文字母表 (不论学习什么语言,字母表都是最好的开始方式,或许很多人会觉得它看起来奇怪,其实韩语的字母表非常简单的哦。甚至由于它非常简单易懂,…

    2022-11-29
  • 田鸡养殖,长汀河田鸡养殖

    1、雏鸡饲养管理 (1)育雏前的准备工作 A、育雏室的准备:选择保温供热方式,搭建育雏设施及保温设施,地面平养的应铺好经消毒的垫料(谷壳、切碎的稻草)。 B、在接运鸡苗前预热试温:…

    2022-12-13