ARM学习(22)断点认识以及调试

news2024/11/16 23:30:40

笔者来聊聊断点以及断点的调试

1、断点原理

断电的原理一般分为两种,插入断点指令或者利用硬件调试寄存器进行断点

  • 前者程序如果在RAM(SRAM、DDR)上,则调试器可以直接在断点地址处插入断点指令,例如BKPT(ARM)、HLT指令(x86),程序则可暂停,后续可以单步运行等操作。
  • 后者程序如果在ROM/Flash运行,调试器无法改写ROM或者Flash的内容,需要利用硬件支持的寄存器特性去进行调试。

Cortex-M3/4,利用Flash补丁或者断点单元(FPB)中的地址比较器进行设置断点,还有多个调试寄存器辅助调试,例如暂停、获取寄存器数据以及传递数据等。例如一个调试控制寄存器如下:

在这里插入图片描述

  • 支持暂停内核
  • 单步运行处理器
  • 单步时屏蔽中断
  • 读写状态等

  • 调试访问的主要架构(CoreSight)如下所示:以CortexM3为例,

在这里插入图片描述

  • DP(Debug Port):调试端口,SWD下面称为SW-DP,JTAG下面称为JTAG-DP,将调试协议转为内部调试总线协议(32位的总线协议,与AMBA3.0规范中的高级外设总线APB非常类似)。
  • AP(Acess Port):访问端口,有AHB-AP模块,可以将内部调试总线协议转成高速性能总线,可以获取所有存储器、外设以及处理器内部的寄存器等数据。

接着来看一下SWD和Jtag链接时,扫描出的DP和AP端口。

SWD 链接时扫描DP和AP端口

 - Found SW-DP with ID 0x1BA01477
 - DPIDR: 0x1BA01477
 - Scanning AP map to find all available APs
 - AP[1]: Stopped AP scan as end of AP map has been reached
 - AP[0]: AHB-AP (IDR: 0x14770011)
 - Iterating through AP map to find AHB-AP to use
 - AP[0]: Core found
 - AP[0]: AHB-AP ROM base: 0xE00FF000
 - CPUID register: 0x411FC231. Implementer code: 0x41 (ARM)
 - Found Cortex-M3 r1p1, Little endian.

JTAG 链接时扫描DP和AP端口,支持菊花链,多个被调试主控串联起来。

 - TotalIRLen = 9, IRPrint = 0x0011
 - JTAG chain detection found 2 devices:
 -  #0 Id: 0x3BA00477, IRLen: 04, CoreSight JTAG-DP
 -  #1 Id: 0x06414041, IRLen: 05, STM32 Boundary Scan
 - DPv0 detected
 - Scanning AP map to find all available APs
 - AP[1]: Stopped AP scan as end of AP map has been reached
 - AP[0]: AHB-AP (IDR: 0x14770011)
 - Iterating through AP map to find AHB-AP to use
 - AP[0]: Core found
 - AP[0]: AHB-AP ROM base: 0xE00FF000
 - CPUID register: 0x411FC231. Implementer code: 0x41 (ARM)
 - Found Cortex-M3 r1p1, Little endian.

2、断点分类

2.1、实现原理分类

  • 硬件断点
    • 与芯片架构内核相关,调试器需要设置对应的断点寄存器
    • 应用于Flash、ROM以及RAM等区域
    • 数量有限
      在这里插入图片描述
      CortexM3-M4的很多芯片比如STM32F1 F4都是Flash执行代码,所以只能设置onchip断点,且只有6个,多了会报错。
      在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 软件断点

    • 调试器利用断点指令,在断点地址处插入断点指令
    • 在RAM(RAM、TCM以及DDR)等区域,
    • 断点数量无限
      在这里插入图片描述
  • ETM断点

    • ARM部分芯片特有,CortexM系列没有
    • 设置ARM Coresight ETM寄存器来实现
    • 数量有限
      在这里插入图片描述

2.2、使用场景分类

  • 程序断点

    • 程序运行到指定位置,则停止CPU
    • 可以是软件断点或者硬件断点
      在这里插入图片描述
  • 读写断点

    • 只能是硬件断点
    • 指定内存/变量,发生读写行为时,停下CPU
      在这里插入图片描述
  • 数据断点

    • 只能是硬件断点,
    • 指定内存/变量发生读写指定值时,停下CPU
    • 和读写断点,类似,只不过加了更细节的条件
      在这里插入图片描述
  • 高级断点

    • 只能是硬件断点
    • 增加了更细节的条件,满足一定条件后停止,比如read 10次之后停止,又比如,当变量值>某个值时,然后停止。
      在这里插入图片描述

在这里插入图片描述

2.3、对CPU的影响分类

  • 侵入式断点
    • 对CPU执行有影响,不断停下CPU,对相应的值或者条件判断,
  • 非侵入式断点
    • 对CPU执行没有影响,
      在这里插入图片描述

3、断点调试

  • 方法一:双击程序所在行即可设置对应的行断点

  • 方法二:利用symbol符号进行设置断点
    在这里插入图片描述

  • 方法三:利用窗口进行设置:
    在这里插入图片描述

  • 命令行设置:b.set addr/addr-range/name /options 后面可以跟地址、地址范、symbol名字以及选项

    • b.set 0x1000005FC 在0x1000005FC 地址处设置断点
    • b.set mstatic1 /readwrite 读写 mstatic1 该变量时,停止运行
    • b.set mstatic1 /write /DATA.Long 0xC 当变量mstatic1 写成0xC时,停止运行
    • b.set mstatic1 /Write /COUNT 10 当变量mstatic1被循环写10次之后,停止运行
    • b.set mstatic1 /Write /VarCONDition mstatic1>0xC 当变量mstatic1大于0xC时,停止断点
      在这里插入图片描述

4、参考以及附录

Trace32 官方文档:5 断点.pdf
SWD 链接的打印完整log。

Connecting ...
 - Connecting via USB to probe/ programmer device 0
 - Probe/ Programmer firmware: J-Link V9 compiled May  7 2021 16:26:12
 - Device "STM32F105RC" selected.
 - Target interface speed: 4000 kHz (Fixed)
 - VTarget = 3.372V
 - InitTarget() start
 - InitTarget() end
 - Found SW-DP with ID 0x1BA01477
 - DPIDR: 0x1BA01477
 - Scanning AP map to find all available APs
 - AP[1]: Stopped AP scan as end of AP map has been reached
 - AP[0]: AHB-AP (IDR: 0x14770011)
 - Iterating through AP map to find AHB-AP to use
 - AP[0]: Core found
 - AP[0]: AHB-AP ROM base: 0xE00FF000
 - CPUID register: 0x411FC231. Implementer code: 0x41 (ARM)
 - Found Cortex-M3 r1p1, Little endian.
 - FPUnit: 6 code (BP) slots and 2 literal slots
 - CoreSight components:
 - ROMTbl[0] @ E00FF000
 - ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 001BB000 SCS
 - ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 001BB002 DWT
 - ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 000BB003 FPB
 - ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 001BB001 ITM
 - ROMTbl[0][4]: E0040000, CID: B105900D, PID: 001BB923 TPIU-Lite
 - ROMTbl[0][5]: E0041000, CID: B105900D, PID: 101BB924 ETM-M3
 - Executing init sequence ...
  - Initialized successfully
 - Target interface speed: 4000 kHz (Fixed)
 - Found 1 JTAG device. Core ID: 0x1BA01477 (None)
 - Connected successfully

JTag 链接的打印完整log。

Connecting ...
 - Connecting via USB to probe/ programmer device 0
 - Probe/ Programmer firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
 - Device "STM32F103RC" selected.
 - Target interface speed: 4000 kHz (Fixed)
 - VTarget = 3.338V
 - InitTarget() start
 - TotalIRLen = 9, IRPrint = 0x0011
 - JTAG chain detection found 2 devices:
 -  #0 Id: 0x3BA00477, IRLen: 04, CoreSight JTAG-DP
 -  #1 Id: 0x06414041, IRLen: 05, STM32 Boundary Scan
 - InitTarget() end
 - TotalIRLen = 9, IRPrint = 0x0011
 - JTAG chain detection found 2 devices:
 -  #0 Id: 0x3BA00477, IRLen: 04, CoreSight JTAG-DP
 -  #1 Id: 0x06414041, IRLen: 05, STM32 Boundary Scan
 - DPv0 detected
 - Scanning AP map to find all available APs
 - AP[1]: Stopped AP scan as end of AP map has been reached
 - AP[0]: AHB-AP (IDR: 0x14770011)
 - Iterating through AP map to find AHB-AP to use
 - AP[0]: Core found
 - AP[0]: AHB-AP ROM base: 0xE00FF000
 - CPUID register: 0x411FC231. Implementer code: 0x41 (ARM)
 - Found Cortex-M3 r1p1, Little endian.
 - FPUnit: 6 code (BP) slots and 2 literal slots
 - CoreSight components:
 - ROMTbl[0] @ E00FF000
 - ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 001BB000 SCS
 - ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 001BB002 DWT
 - ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 000BB003 FPB
 - ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 001BB001 ITM
 - ROMTbl[0][4]: E0040000, CID: B105900D, PID: 001BB923 TPIU-Lite
 - ROMTbl[0][5]: E0041000, CID: B105900D, PID: 101BB924 ETM-M3
 - Executing init sequence ...
  - Initialized successfully
 - Target interface speed: 4000 kHz (Fixed)
 - Found 2 JTAG devices. Core ID: 0x3BA00477 (None)
 - Connected successfully

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python自动化测试-自动化基本技术原理

1 概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据。 掌握上面的这样的本领可不是容易的事情,必须要有扎实的计算机理论基础,才能看到深层次的本质东西。 …

家用电器-空调制冷、制热、除霜、除湿、换新风的基本原理及实现讲解

目录 一、空调历史 二、空调的作用 三、空调类型 四、基本原理 4.1 制冷过程 4.2 制热过程 4.3 除霜过程 4.4 除湿过程 4.5 换气过程 五、电路控制系统 六、核心部件 七、基本指标 1)气候类型 2)额定制冷量 3)能效比 八、市场…

4年功能庸庸碌碌,进阶自动化测试拿到了24k,测试之路不再平凡...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 手工测试如何进阶…

多业务聚合查询设计思路与实践

文章目录 [toc] 1.需求2.方案2.1 方案架构图2.2 选用flink-cdc的原因 3.实践3.1 环境准备3.3 es集群搭建3.4 flink1.14.0环境搭建3.5 准备sql和jar包3.5.1[创建mysql的flink用户并授权](https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc…

【树形DP+直径思想】代码源每日一题div1 三进制循环

三进制循环 - 题目 - Daimayuan Online Judge 题意: 思路: 有点像树的直径 回顾一下我们是怎么求直径的:维护根节点到其子树上的点的最大距离和次大距离,然后答案就是统计所有结点的次大值最大值 的 最大值 这道题也是一样的&a…

C盘爆满时的几个救命无害清理技巧

其实网上也有很多清理C盘的方法 但是很多就是为了弄成空间 不讲原理 也不计后果 很可能坑惨小伙伴 可以看到 我电脑的C盘都已经读红条了 非常危险 对了 可能有些朋友的电脑上没有此电脑的选项 我们可以在桌面上右键选择 个性化 找到 主题 并选择 向下拉 找到 桌面图标设置 …

经验总结:13 条自动化测试框架设计原则!

1.代码规范 测试框架随着业务推进,必然会涉及代码的二次开发,所以代码编写应符合通用规范,代码命名符合业界标准,并且代码层次清晰。特别在大型项目、多人协作型项目中,如果代码没有良好的规范,那么整个框…

微服务之负载均衡

Informal Essay By English I wish the students of the college entrance examination can win the gold toad and win the title of the gold list 参考书籍:“凤凰架构” 负载均衡(load balance) 负载平衡是指在一组后端服务器&#xf…

《计算机网络——自顶向下方法》精炼——4.4.1-4.4.2

敬教劝学,建国之大本;兴贤育才,为政之先务。——《朱舜水集。劝学》 文章目录 IPv4编址接口IP地址子网 无类别域间路由选择(CIDR)获取一块地址获取主机地址网络地址转换 IPv4编址 接口 主机或路由器与物理链路的边界称作接口。一…

深度学习卷积神经网络CNN之ResNet模型网络详解说明(超详细理论篇)

1.ResNet背景 2. ResNet论文 3. ResNet模型结构 4. ResNet优缺点 一、ResNet背景 ResNet 在2015 年由微软研究院提出的一种深度卷积神经网络结构,在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军(分类…

python - kubernetes中grpc服务健康检查实现

概述 kubernetes本身不支持gRPC健康检查,本文记录使用 ‘grpc-health-probe’ 实现grpc服务的健康检查 ‘grpc-health-probe’,这是 Kubernetes 原生的健康检查 gRPC 应用程序的方法 官方参考文档:https://kubernetes.io/zh-cn/blog/2018/1…

45--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-纯手工安装部署和docker一键部署

前期准备: 购买服务器,公网地址访问 服务器有多种选择,阿里云,腾讯云,华为云(可以免费试用几个月) 买阿里云就当成你去电脑市场组装了一台电脑。阿里云按时间计费(账户余额要大于100)。 购买流程: 搜索云服务器 开始创建你的云服务器 按量付费:用多少扣多少 地域…

ORACLE PL/SQL编程总结(一)

目录 1.1 SQL与PL/SQL 1.2 PL/SQL的优点或特征 1.3 PL/SQL 可用的SQL语句 1.4 运行PL/SQL程序 2.1 PL/SQL块 2.2 PL/SQL结构 2.3 标识符 2.4 PL/SQL 变量类型 2.5 运算符和表达式(数据定义) 2.6 变量赋值 2.7 变量作用范围及可见性 2.8 注释 2.9 简单例子 3.1 条件…

算法刷题-哈希表-两数之和

两数之和 1. 两数之和思路总结其他语言版本 1. 两数之和 力扣题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中…

【Leetcode】DP | 买卖股票的最佳时机,DP居然还可以用状态机?

带状态的DP君~ 类型总结:买卖一次、买卖无限次、买卖k次、买卖无限次、含冷冻期。 买卖k次的问题需要不断统计、维护买卖i次的最大收益。 状态较多的题可以借助状态机分析状态转移情况。 121 买卖股票的最佳时机 统计第 i i i天之前的股票最低价格,…

性能测试项目实战:应用加载慢该怎么办?

背景 app收到留学push、课堂、资讯,用户点击push消息,进入app,应用加载很慢,容易出现应用假死、app崩溃或提示网络异常等信息。 给用户体验十分不友好,监控阿里云资源tcp连接数飙高,cpu打满&#xff0c…

Nginx运行原理与基本配置文件讲解

文章目录 Nginx基本运行原理Nginx的基本配置文件serverlocationroot 与 alias 的区别server 和 location 中的 rootnginx欢迎页 本文参考文章Nginx相关文章 Nginx基本运行原理 Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个…

docker-compose编排容器

系列文章目录 文章目录 系列文章目录一、docker-compose1.Docker Compose2.YAML 文件格式及编写注意事项3.安装docker-compose4.Docker Compose配置常用字段 二、创建compose1.准备依赖文件2. 总结 一、docker-compose 1.Docker Compose 如果需要定义多个容器就需要服务编排。…

priority_queue的模拟实现

前言 优先级队列听名字好像与队列有关,但是实际上,与队列没有很多关系,它也是容器适配器,是通过vector来适配的,但是里面又加入了堆的调整算法。跟栈和队列又有一些不同,了解它的实现对于我们更好的掌握它是…

新手上路,安全驾驶,做行车安全的第一责任人

目录 一、生活与汽车二、树立安全意识三、掌握驾驶经验四、参考材料 道路千万条,安全第一条,行车不规范,亲人两行泪。 ——《流浪地球》 一、生活与汽车 开车是为了节省在路途上花费的时间,片面的追求交通效率会引发交通安全问题&…