我正在尝试调试一个部分使用缓存数据内存和缓存指令内存的程序。问题是在尝试检查这样的内存时调试器是如何工作的。在检查特定位置时是否访问缓存副本?如果是这样,它是否实际修改了缓存,因为它必须在未命中时获取数据?是否意味着程序行为在调试器下可能与没有它的程序行为不同?有没有调试缓存相关问题的方法,而调试器不会影响缓存? 更新:特定的CPU核心是ARM Cortex-A5。调试器是DSTREAM / DS-5
答案 0 :(得分:3)
我认为这个问题有点泛,因为它取决于CPU。
然而,一些非常全球性的规则:
答案 1 :(得分:2)
DS-5使用连接到CPU的JTAG探针。要读取CPU的可寻址内存,必须通过微操作运行CPU来获取内存。与CPU只是运行程序相比,这会扰乱缓存。
您可以通过在关键(可疑)代码之后不停止CPU来最小化效果,然后尝试将寄存器和内存的内容组合在一起。如果您可以从程序的开头到断点运行程序,特别是如果它是10,000+条指令,则缓存可能会被置于正确的状态。除非有异步活动。
要确定问题是否是由于缓存造成的,也许你可以简单地禁用缓存?