首页 > 解决方案 > Lauterbach trace32:如何在缓存区域使用断点

问题描述

我最近正在调试一个 Cortex-M4 程序,该程序的文本部分位于缓存的内存区域。连接到设备后,我正在尝试设置软件断点。可以命中断点并停止 CPU。但是,我无法进行任何进一步的调试(STEP,或设置另一个断点并运行),PC 总是坚持第一个断点。

问题可能是因为缓存。当软件断点被命中时,调试器应该已经将物理内存区域改回原来的值,但是指令缓存没有更新。所以 CPU 一直执行断点操作码,永远不会向前移动。

ARM 文档在此链接中有如下描述

调试器无法访问指令缓存。因此,调试器对内存的可缓存、可执行区域的访问可能与处理器指令端可见的指令不一致。

但是它没有给出解决方案。

我正在考虑在断点命中后手动使指令缓存无效。尝试使用 trace32cache clean IC命令,但它说该命令已锁定。不确定这是许可证问题还是 Cortex-M4 不支持该命令。

有没有人有经验来处理这个?

标签: cachingbreakpointstrace32lauterbach

解决方案


推荐阅读