当前位置:网站首页>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断点的使用
原网站

版权声明
本文为[Rainmicro]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_48120109/article/details/126091336