Ozone数据断点使用
GaoSheng Lv5

在调试程序过程中会经常用到程序断点(即程序在执行到特定位置时停下来),但本文介绍的是数据断点,用于监控内存地址及其数据的变化。这种类型的断点在调试一些疑难重症时出奇的有效。
比如某个变量的值总是不符合预期,单步执行或者程序断点又难以定位问题,或者是某一段程序莫名的被篡改,这个时候就可以考虑数据断点了。
在Ozone使用数据断点,首先需要将变量添加到watch窗口,在变量上右键选择 “Set Data Breakpoint”
图片1
在断点窗口可以看到type 为Data,程序会在变量发生变化的地方自动停下
图片2

也可以指定地址,用于监控内存
图片3

常见应用场景

  • 调试被应用程序异常破坏的标志或变量
  • 调试堆栈溢出,可以在堆栈栈顶接近栈大小的位置打数据断点
  • 数据断点的地址可以是外设寄存器的地址,可以调试外设寄存器被误修改的场景
    注意事项
  • 数据断点对于“DMA对内存的修改”无效
  • 数据断点对于“Debugger对内存的修改”无效

在一次debug过程中发现如果对CAN进行deinit,之后再进行flash的操作就会直接跳转到硬件错误中断
图片4
错误类型为unaligned非对齐错误。后面使用数据断点发现是将CAN接口deinit后还有别的任务在调用CAN进行发送任务,导致出现了空指针将一段代码(flash操作的程序)篡改了。可见大部分所谓的“玄学”问题都是用户代码逻辑不够严谨导致。


https://forum.ytmicro.com/topic/1059/ozone-%E6%95%B0%E6%8D%AE%E6%96%AD%E7%82%B9-data-breakpoint-%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D/2?_=1764136968117

本站由 提供部署服务