caching - Lauterbach trace32:如何在缓存区域使用断点
问题描述
我最近正在调试一个 Cortex-M4 程序,该程序的文本部分位于缓存的内存区域。连接到设备后,我正在尝试设置软件断点。可以命中断点并停止 CPU。但是,我无法进行任何进一步的调试(STEP,或设置另一个断点并运行),PC 总是坚持第一个断点。
问题可能是因为缓存。当软件断点被命中时,调试器应该已经将物理内存区域改回原来的值,但是指令缓存没有更新。所以 CPU 一直执行断点操作码,永远不会向前移动。
ARM 文档在此链接中有如下描述
调试器无法访问指令缓存。因此,调试器对内存的可缓存、可执行区域的访问可能与处理器指令端可见的指令不一致。
但是它没有给出解决方案。
我正在考虑在断点命中后手动使指令缓存无效。尝试使用 trace32cache clean IC
命令,但它说该命令已锁定。不确定这是许可证问题还是 Cortex-M4 不支持该命令。
有没有人有经验来处理这个?
解决方案
推荐阅读
- proxy - Squid - 允许本地网络访问特定网站
- python - 为什么应用 xlrd.xldate_as_datetime() 函数不会按预期更新数据帧的子集?
- javascript - 按对象的键/值的打字稿动态功能
- python - 对每次迭代中调用两次的同一方法执行多处理
- reactjs - TypeError:无法读取未定义的属性“错误”
- docker - 如何在我的 docker 镜像中安装 openmodelica?
- bash - 将两个数组组合成一个具有两个属性的对象数组
- javascript - 如何将我的对象从仅包含内部数组的一个对象更改为一组对象?
- gulp - MIXIN_WITHOUT_BODY - 哈巴狗混合
- r - 如何合并相似但不相同的行?