当前位置:网站首页>TRACE32——使用读写断点
TRACE32——使用读写断点
2022-08-03 02:06:00 【Rainmicro】
TRACE32——使用读写断点
断点是调试过程中,必不可少的一个功能。我们最常用的就是程序断点:将断点打在程序的某一行,当程序执行到该处时,触发断点生效,CPU暂停下来。
除了作为程序断点和读写断点的基础片上(Onchip)断点外,TRACE32还提供了只在特定条件下停止程序执行的更复杂断点。这些断点会尽可能部署为实时(real-time)断点,这就意味着内核上程序的实时执行,不会受断点条件检查的干扰,然而这些需要特定的片上中断逻辑支持,如果内核的片上中断逻辑不提供相关功能,TRACE32只能部署一个侵入式(intrusive)断点,在此情况下,当程序执行停止在一个断点触发处,调试器会执行所需的条件检查,并且条件不满足,就恢复程序执行。软件条件中断总是被部署为侵入式断点。
一个常用的断点功能就是,读写断点。
该教程会给大家介绍一下读写断点使用过程中的几个经典场景:
- 当一个变量被改写成一个特定的值的时候停下CPU
- 当一个变量被一个特定的函数改写的时候停下CPU
- 其他一些使用场景和小细节
1.我们先看第一个场景:当一个变量被改写成一个特定的值的时候停下CPU
例如,我们按下图的方法设置后,就是一个典型的读写断点:
当mcount变量被写入100. 时停下CPU
(十进制,要在数字后面加小数点. 下同)
设置好了后,我们运行程序,就可以看到效果了:
mcount被写入100.的时候CPU停了下来
大家在实际操作的时候,会发现:
有些时候,CPU停下来,变量已经被改写成自己设定的值;
而有些时候,CPU停下来,需要单步一次,变量才会变成自己设定的值
这个就是 *break-before-make*
和 ***break-after-make***的区别
设定值的时候,还可以设置一个非值,例如,可以设置mstatic1被写入任意一个值的时候CPU被暂停,但这个值不能是12
我们可以在DATA区域设置 !12.
2.第二个场景:当一个变量被一个特定的函数改写的时候停下CPU
例如下图中,我们设置断点,期望当变量mstatic1被main函数改写时停下CPU
设置好后,运行CPU,就可以看到设置的断点生效
稍微修改一下,我们还可以把断点变成:
当变量mstatic1在main函数以外的地方被改写时停下CPU
3.除此之外,还有很多有意思的细节
- 前面已经提过的*break-before-make* 和 *break-after-make*
- 实时断点和侵入式断点的区别
- 地址范围断点和单地址断点的区别
- ETM断点的使用
边栏推荐
猜你喜欢
随机推荐
常用工具链和虚拟环境-WSL
236. The binary tree in recent common ancestor
[QNX Hypervisor 2.2用户手册]10 虚拟设备参考
Fiddler基本使用
The Multiversity 的 “非常重要的生命体” NFT 推出
【面经】被虐了之后,我翻烂了equals源码,总结如下
数据中台建设(八):数据服务体系建设
The LVS load balancing cluster and the deployment of the LVS - NAT experiment
44LVS负载均衡群集-NAT
有趣简单的M2处理器性能实验:Swift与C代码执行速度的比较
[Static type and dynamic type compile check and run check in Objective-C]
堆的应用:堆排序和TOP-K问题
选中按钮上色
【云原生】阿里云ARMS业务实时监控
禁用token及无感知更新token功能实现
征集 |《新程序员》专访“Apache之父”Brian Behlendorf,你最想问什么?
工作两年成跳槽高峰期,程序员会在一家公司待多久?
Topic Modeling of Short Texts: A Pseudo-Document View
思维+启发式合并
【UE4】Build VR live broadcast in LAN UE4.27