TRACE32——使用读写断点

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断点的使用
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值