调试器内存监视/检查缓存内存

时间:2016-04-22 14:21:39

标签: debugging caching gdb arm ds-5

我正在尝试调试一个部分使用缓存数据内存和缓存指令内存的程序。问题是在尝试检查这样的内存时调试器是如何工作的。在检查特定位置时是否访问缓存副本?如果是这样,它是否实际修改了缓存,因为它必须在未命中时获取数据?是否意味着程序行为在调试器下可能与没有它的程序行为不同?有没有调试缓存相关问题的方法,而调试器不会影响缓存? 更新:特定的CPU核心是ARM Cortex-A5。调试器是DSTREAM / DS-5

2 个答案:

答案 0 :(得分:3)

我认为这个问题有点泛,因为它取决于CPU。

然而,一些非常全球性的规则:

  • 调试器将尝试查看CPU在数据访问上看到的内容,其中包括数据缓存上的缓存查找。
  • 这与指令缓存不同,因为调试器通常不会执行查找,因为它将执行数据访问。但这通常不是问题,因为指令缓存不包含脏数据。根据调试器的不同,它可以清除DCache,并在写入数据时使相应的ICache行无效。
  • 调试访问将尝试不侵入,并且可以强制在未命中的情况下不执行行填充的模式。但这实际上取决于CPU,而不是全局规则。

答案 1 :(得分:2)

DS-5使用连接到CPU的JTAG探针。要读取CPU的可寻址内存,必须通过微操作运行CPU来获取内存。与CPU只是运行程序相比,这会扰乱缓存。

您可以通过在关键(可疑)代码之后不停止CPU来最小化效果,然后尝试将寄存器和内存的内容组合在一起。如果您可以从程序的开头到断点运行程序,特别是如果它是10,000+条指令,则缓存可能会被置于正确的状态。除非有异步活动。

要确定问题是否是由于缓存造成的,也许你可以简单地禁用缓存?