用于缓存内存的调试器内存 watch/examine
Debugger memory watch/examine for cached memory
我正在尝试调试部分使用缓存数据内存和缓存指令内存的程序。问题在于调试器在尝试检查此类内存时如何工作。它在检查特定位置时是否访问缓存副本?如果是这样,它是否真的修改了缓存,因为它必须在未命中时获取数据?这是否意味着在调试器下的程序行为可能与没有它的程序行为不同?在调试器不影响缓存的情况下调试缓存相关问题的任何方法?
更新:具体的CPU核心是ARM Cortex-A5。调试器是 DSTREAM/DS-5
我认为这个问题有点笼统,因为它将取决于 CPU。
但是一些非常通用的规则:
- 调试器将尝试查看 CPU 在数据访问中看到的内容,其中包括对数据缓存的缓存查找。
- 这与指令缓存不同,因为调试器通常不会执行查找,因为它会执行数据访问。但这通常不是问题,因为指令缓存不包含脏数据。根据调试器,如果写入数据,它可以清除 DCache 并使相应的 ICache 行无效。
- 调试访问将尽量不被打扰,并且可以强制采用不执行行填充的模式以防未命中。但这实际上取决于 CPU 而不是全局规则。
DS-5 使用连接到 CPU 的 JTAG 探针。要读取 CPU 的可寻址内存,它必须 运行 CPU 通过其微操作来获取内存。这对缓存的干扰不同于 CPU 只是对 运行 程序的影响。
您可以通过在关键(可疑)代码之后才停止 CPU 来最大程度地减少影响,然后尝试从寄存器和内存的内容中拼凑出一定发生的事情。如果你可以 运行 一个程序从开始到断点,特别是如果那是 10,000 多条指令,缓存可能会进入正确的状态。除非有异步activity.
要确定问题是否由缓存引起,也许您可以简单地禁用缓存?
我正在尝试调试部分使用缓存数据内存和缓存指令内存的程序。问题在于调试器在尝试检查此类内存时如何工作。它在检查特定位置时是否访问缓存副本?如果是这样,它是否真的修改了缓存,因为它必须在未命中时获取数据?这是否意味着在调试器下的程序行为可能与没有它的程序行为不同?在调试器不影响缓存的情况下调试缓存相关问题的任何方法?
更新:具体的CPU核心是ARM Cortex-A5。调试器是 DSTREAM/DS-5
我认为这个问题有点笼统,因为它将取决于 CPU。
但是一些非常通用的规则:
- 调试器将尝试查看 CPU 在数据访问中看到的内容,其中包括对数据缓存的缓存查找。
- 这与指令缓存不同,因为调试器通常不会执行查找,因为它会执行数据访问。但这通常不是问题,因为指令缓存不包含脏数据。根据调试器,如果写入数据,它可以清除 DCache 并使相应的 ICache 行无效。
- 调试访问将尽量不被打扰,并且可以强制采用不执行行填充的模式以防未命中。但这实际上取决于 CPU 而不是全局规则。
DS-5 使用连接到 CPU 的 JTAG 探针。要读取 CPU 的可寻址内存,它必须 运行 CPU 通过其微操作来获取内存。这对缓存的干扰不同于 CPU 只是对 运行 程序的影响。
您可以通过在关键(可疑)代码之后才停止 CPU 来最大程度地减少影响,然后尝试从寄存器和内存的内容中拼凑出一定发生的事情。如果你可以 运行 一个程序从开始到断点,特别是如果那是 10,000 多条指令,缓存可能会进入正确的状态。除非有异步activity.
要确定问题是否由缓存引起,也许您可以简单地禁用缓存?