在海思芯片上使用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)

大家都在看

  • MAC查看网络端口、进程使用情况

    查看所有TCP连接 lsof -nP -iTCP 查看所有TCP中的LISTEN连接 lsof -nP -iTCP -sTCP:LISTEN 查看某个进程的所有网络状态 lsof …

    技术杂谈 2023年6月1日
    084
  • django-ckeditor配置html5video上传视频

    参考信息 为Django ckeditor配置上传视频:https://www.byincd.com/bobjiang/article-01128/ 使用 1. 手动下载插件 ht…

    技术杂谈 2023年6月21日
    094
  • 技术管理进阶——如何提升团队的合作和技术氛围

    如何提升合作氛围 前段时间有个粉丝问了一个问题: 小钗你好,我是公司一个技术总监,现在发现团队合作气氛很奇怪,大家互相看不上,随时有爆炸概率,面对这种情况应该怎么办呢? 很好的问题…

    技术杂谈 2023年6月1日
    087
  • linux下安装jdk8

    1、下载jdk8安装包 2、拷贝到指定目录下(比如:/usr/package) 3、解压到安装目录下(比如:/usr/soft/java) tar -zxvf jdk-8u121-…

    技术杂谈 2023年6月21日
    083
  • 统一的Json组件和csv下载组件

    Json组件 规范Json接口格式 Controller中一律返回 Java object,组件将自动转换数据格式,满足Json接口格式 统一处理Json接口中出现的异常,cont…

    技术杂谈 2023年6月1日
    082
  • mstar安卓智能电视方案源代码常用修改

    优先 替换 Supernova\projects\customerinfo\inc\Customer_Info.h替换 内核中linux/drivers/mmc/core/mmc….

    技术杂谈 2023年5月31日
    089
  • 日常踩坑_jpa的踩坑心得

    背景提要 使用jpa的出现了很多问题1、使用between做日期范围查询时报错2、使用@Query注解写原生sql时报错3、使用@where注解自动在sql后添加条件时查不出东西4…

    技术杂谈 2023年7月25日
    068
  • mongdb Atlas

    免费的 512M mongdb 数据库,可直观查看数据,不需要另外安装 Navicat。 登录地址:https://account.mongodb.com/account/logi…

    技术杂谈 2023年5月30日
    081
  • cpp创建对象的多种形式

    1 使用非默认构造函数来创建对象的几种形式 Person person = Person("binny1", 26); 这种方式创建对象,C++标准允许编译器使…

    技术杂谈 2023年7月10日
    061
  • 怎么有效解决“未能创建 SSL/TLS 安全通道”异常

    之前写了一个服务自动程序,程序会访问第三方的一个https接口,一直用的好好的,今天突然报错了,异常就发生在访问接口的地方,”请求被中止,未能创建 SSL/TLS 安全…

    技术杂谈 2023年5月31日
    0223
  • 【docker】python: can’t open file ‘helloworld.py’: [Errno 13] Permission denied

    运行容器提示权限问题 docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python hel…

    技术杂谈 2023年7月24日
    089
  • 查看外网IP

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    081
  • 一些代码规则

    一些关于底层的代码问题 进制换算的代码 进制(在数字前加对应字母):二进制0b十进制无八进制0十六进制0x 调试 可以进行对单一代码进行运算确认是否有bug 最好完全避免使用浮点数…

    技术杂谈 2023年6月21日
    098
  • 袭击Mercurial SCM(HG)

    这个叫水银的源代码管理工具尽管默默无闻,但还是得到了非常多团队的使用。 为了迎合某些团队的须要,我们也要用它来管理我们的代码。 今天的任务是先袭击学习。磨刀不误砍柴工。 对工具的掌…

    技术杂谈 2023年5月31日
    095
  • Call Hierarchy With IntelliJ IDEA

    Call Hierarchy allows you to quickly see all the places where a function or method is used…

    技术杂谈 2023年5月31日
    0100
  • html大文件传输讨论

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步: 前端修…

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