没志青年
发布于 2025-10-11 / 26 阅读
0

调试技巧06 - 数据被破坏的调试方法

手工打断点

修改bin文件,手动打断点。

适合场景:

  • 没有调试器

  • 代码稍微改动现象就不一样,无法定位原因。

  • 想查看程序任意位置的状态

  • 不敢修改代码,怕破坏重要的数据

生成 bin 文件指令:

fromelf --bin --output="$L@L.bin" "#L"

使用 STM32 ST-LINK Utility 打开 bin 文件

设置数据宽度为16位,然后输入要打断点的位置:

Enter 确认,然后就定位到了。

把这个值改为 ffff

然后重新保存bin文件

使用 DWT 跟踪

DWT 是Cortex-M中的一个内核外设,是一个专用的调试单元,它为处理器提供观察点、数据跟踪和系统分析。

DWT 作用:

  • 监测数据总线、指令总线

  • 当地址等于某个数值,触发异常

  • 当数据等于某个数值,触发异常

这种方法适用于:

一个变量,本不应该被修改:如果它被修改了,如何快速定位?

一个函数,本不应该执行:如果它执行了,如何快速定位?

一个很特殊的数值,比如0xAA55AA55,被写入变量里了,如何快速定位?

1、首先得运行一次,知道变量的地址

拔掉 ST-LINK(断电),否则 DWT 不会触发异常,而是 CPU 停止运行。