keil利用Breakpoints追踪内存值异常修改分析说明

在开发过程中,经常会遇到内存值被异常篡改的情况。而且,篡改者往往并不是你当前所正在进行调试的部分(即内存异常篡改其实早就存在,只不过现在才凸显出来),这样问题很难跟踪,故利用keil的这一特性,追踪问题。

以下项目举例说明

1. 用电设备,A相电压偏差极值显示63.25%,而此时额定电压为220v,A相单相上电,偏差值不应
   有这么大偏差值计算公式为:

    ΔU = ((U - Un) / Un) * 100%;

    式中:△U--电压偏差百分比;U一实际电压:Un电网标称电压。

2. 观察ac_data_memory中相应数据显示确实为这么大,考虑数据调试过程中异常,故对到下一
   日,对时后,数据变为0,1分钟后变为60+%(其实是有做统计数据,但此时并未往这方面想)。

3. 经过2的分析后,确定一定是有某个地方对这块内存操作了,故使用推荐方法跟踪是哪个地方在
   操作内存。

4. 查看内存地址:

5. 添加此内存地址(0x20017B27)到Breakpoints,Debug->Breakpoints,如:

6. 添加步骤如下图:

7. 全速运行,当访问者修改这片内存时,程序会中断,这时断点的位置就时访问者。如:

8. 问题定位。

注意事项

使用中并不能100%命中,不能过分依赖。

你可能感兴趣的:(keil,MDK,内存)