当前位置: 首页 > news >正文

gdb 条件断点_蜂鸟E203系列——Linux调试(GDB+Openocd)

231516b1e72107d5a3af2edb959e990f.png
蜂鸟E203系列——Linux调试(GDB+Openocd)​mp.weixin.qq.com
5269afcff5b062701cc78b2898e6059d.png
本文基于文章《蜂鸟E203系列——利用 Hbrid-E-SDK 环境开发程序》

GDB 简介

GDB(GNU Project Debugger),是 GNU 工具链中的调试软件。 GDB 是一款应用非常广泛的调试工具,能够用于调试 C、 C++、 Ada 等等各种语言编写的程序,它提供如下功能:

  1. 下载或者启动程序
  2. 通过设定各种特定条件来停止程序
  3. 查看处理器的运行状态,包括通用寄存器的值,内存地址的值等
  4. 查看程序的状态,包括变量的值,函数的状态等
  5. 改变处理器的运行状态,包括通用寄存器的值,内存地址的值等
  6. 改变程序的状态,包括变量的值,函数的状态等

707b9caf816eee571533174860ca9949.png

GDB 可以用于在主机 PC 的 Linux 系统中调试运行的程序,同时也能用于调试嵌入式硬件,在嵌入式硬件的环境中,由于资源有限,一般的嵌入式目标硬件上无法直接构建 GDB 的调试环境(譬如显示屏和 Linux 系统等),这时可以通过 GDB + GdbServer 的方式进行远程 (remote) 调试,通常而言 GdbServer在目标硬件上运行,而 GDB 则在主机 PC 上运行。

GDB 常用指令表

命令描述load file动态连接filejump使当前程序跳转到某一行或某个地址info br查看断点信息break function在指定的函数或行号设置断点step进入函数内部next执行下一行代码,但是不进入函数内部continue恢复程序运行,直到碰到下一个断点

常用命令参考链接

https://www.cnblogs.com/jasonLiu2018/p/11494214.html https://www.cnblogs.com/lsgxeva/p/8024867.html

OpenOCD 简介

为了能够支持 GDB 对其进行调试, 蜂鸟 E203 使用 OpenOCD 作为其 GdbServer 与 GDB 进行配合。OpenOCD (Open On-Chip Debugger) 是一款开源的免费调试软件,由社区共同维护,由于其开放开源的特点,众多的公司和个人使用其作为调试软件,支持大多数主流的 MCU 和硬件开发板。

GDB 调试

在hbird-e-sdk目录下执行

1 编译目标文件

make dasm  PROGRAM=helloworld BOARD=hbird-e200 CORE=e203 DOWNLOAD=flash USE_NANO=1 NANO_PFLOAT=0

2 下载运行

make upload  PROGRAM=helloworld BOARD=hbird-e200 CORE=e203 DOWNLOAD=flash USE_NANO=1 NANO_PFLOAT=0

3 打开OpenOCD,与开发板进行连接

make run_openocd PROGRAM=helloworld BOARD=hbird-e200 CORE=e203 DOWNLOAD=itcm

582a01ac5362e692ca912a19e03fed3f.png

3 重新打开一个终端并打开GDB

make run_gdb PROGRAM=helloworld BOARD=hbird-e200 CORE=e203 DOWNLOAD=itcm

f21692b5658db18437bd57b1b7673c90.png

4 在 GDB 界面进行调试:main函数设置断点

break main

5 查看断点信息

info break

d0b648e86ff5cf4ac3b78d53e1a2513a.png

6 从程序main入口执行,程序停在第一个断点处

jump main

b1eb743c57b4a7cdaf72cac2371258ff.png

7 从断点处单步调试

n

d9b1e3bf0b2b32230252f5166df5df11.png

相关文章:

  • gif分解工具_搞笑 GIF 制作工具
  • python123第四周_百度杯十月第四周WriteUp
  • 数据窗口动态生成列_2020 BAT大厂数据分析面试经验:“高频面经”之数据分析篇...
  • using在sql中是什么意思_粤语为什么那么难学?原来我们都弄错了
  • python123可以复制粘贴吗_python 复制与粘贴处理笔记
  • jmeter随机参数化不重复_Jmeter参数化设置介绍
  • python selenium chrome获取每个请求内容_selenium 获取请求返回内容的解决方案
  • python下载包突然卡住_python:在cmd模块中使用多线程下载网页的时候卡住了
  • 希尔排序时间复杂度_究竟是怎么打破二次时间屏障的?浅谈希尔排序的思想和复杂度证明...
  • python创建一个类对象_从python中的另一个类创建类对象
  • 交叉验证python代码_python – 如何正确交叉验证
  • python爬取jsp网页_Python 爬取 热词并进行分类数据分析-[JSP演示+页面跳转]
  • 怎么下载python3.4.3_如何从apt安装Python 3.4.5?
  • python中不论类的名字是什么_Python中的类型提示(下)
  • 软件需求规格说明书非功能性需求_不同视角看需求之我见
  • 自己简单写的 事件订阅机制
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • canvas绘制圆角头像
  • CEF与代理
  • C语言笔记(第一章:C语言编程)
  • es6
  • Java 网络编程(2):UDP 的使用
  • JavaScript实现分页效果
  • java中具有继承关系的类及其对象初始化顺序
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 让你的分享飞起来——极光推出社会化分享组件
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 正则表达式小结
  • Linux权限管理(week1_day5)--技术流ken
  • raise 与 raise ... from 的区别
  • ​香农与信息论三大定律
  • #include
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (九十四)函数和二维数组
  • (南京观海微电子)——I3C协议介绍
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Linq学习笔记
  • (转)memcache、redis缓存
  • (转)大道至简,职场上做人做事做管理
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复