海思 gdb+gdbserver调试·基础篇

2023-10-19 20:10

本文主要是介绍海思 gdb+gdbserver调试·基础篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

随着程序越来越复杂,单靠输出信息调试程序已然是不合适的,所以必须考虑使用gdb调试,由于板子上比较难加载代码,所以最合适的办法应该是gdb+gdbserver远程调试,这样我们可以清楚地看到程序的运行信息。gdb官方文档,可下载最新的pdf。

how

030sdk解压之后,在osdrv/tools/board/gdb/路径下有两个压缩包,gdb-7.9.1.tar.gzncurses-6.0.tar.gz,实测gdb-8.3.1.tar.gz可用,下载链接。

  • 解压
    在这里插入图片描述

带有调试信息的程序

  • 修改CMakeLists.txt的命令行参数配置,生成包含调试信息的文件:
cmake -B ./build -S . -DCMAKE_C_COMPILER=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc -DCMAKE_BUILD_TYPE:STRING="Debug"cmake --build ./build

生成gdb

#由于gdb在host上跑,所以不配置host,默认当前ubuntu系统下运行
#--with-python指定python路径
./configure --with-python=/usr/bin/python3 --prefix="$PWD/install" --target=aarch64-himix100-linux --program-prefix=hisi-
make -j16
make install
  • 如果出现makeinfo未找到命令,则安装texinfo即可。
  • 如果出现no usable python found at python3.6,则安装sudo apt-get install python3.6-dev即可
    在这里插入图片描述
  • 在路径/home/flatfish/hisi/Resources/Hi3559AV100_SDK_V2.0.3.0/osdrv/tools/board/gdb/gdb-8.3.1/install/bin下生成可以在host上跑的gdb
    在这里插入图片描述
    在这里插入图片描述
    可以将hisi-gdb拷贝到/usr/local/bin/
cp hisi-gdb /usr/local/gdb

在这里插入图片描述
这样在其他位置也能调用hisi-gdb调试程序了。

生成gdbserver

在路径/home/flatfish/hisi/Resources/Hi3559AV100_SDK_V2.0.3.0/osdrv/tools/board/gdb/gdb-8.3.1/gdb/gdbserver下,执行类似刚才的配置,区别在于,gdbserver是跑在板端的,所以需要设定host,具体配置如下:

./configure --prefix="$PWD/install" --target=aarch64-himix100-linux --host=aarch64-himix100-linux --program-prefix=hisi-
make -j16
make install
  • 将需要调试的程序拷贝到板端

You need a copy of the program you want to debug,
including any libraries it requires. gdbserver does not need your program’s symbol table,
so you can strip the program if necessary to save space. gdb on the host system does all
the symbol handling.
在这里插入图片描述

  • hisi-gdbserver拷贝到板子的/usr/local/bin

调试

  • 在板端启动程序
#host为本地ip,6666为端口号,不冲突即可,test为程序,foo.txt为参数
gdbserver host:6666 test foo.txt
  • 本地gdb加载
hisi-gdb test
#remoteip代表板端ip,比如192.168.125.12
(gdb) target remote remoteip:6666

在这里插入图片描述
接下来本地就可以使用layout nextcontinue之类的指令调试了。

这篇关于海思 gdb+gdbserver调试·基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242110

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念