手工打断点
修改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 停止运行。