在 Visual Studio 中,您可以在数据上设置断点,以便当数据发生变异时,断点会触发。这似乎依赖于硬件支持,而我当前的处理器仅支持 4 个字节(Ryzen 7 4800H)。有谁知道更现代的处理器拥有什么样的支持,以及我在哪里可以找到此类信息?
您的 CPU 硬件支持 1、2、4 或 8 字节宽的观察点。自然对齐,例如8 字节观察点只能在按 8 对齐的地址上使用。
https://www.kernel.org/doc/ols/2009/ols2009-pages-149-158.pdf说x86-64支持8字节观察点。 https://help.totalview.io/current/HTML/index.html#page/TotalView/Architectures.html 也同意 x86-64 支持 1、2、4 和 8 字节自然对齐观察点Linux,并明确表示 Intel 和 AMD。 这两篇文章都提到了其他 ISA,如果您对这些感兴趣的话。
Totalview 是与 VS 不同的调试器。 如果您安装的 VS 已经有好几年了,旧的 32 位版本的 VS 是否可能不会使用 64 位观察点? IIRC 他们多年来一直将 GUI 本身保持为 32 位。 或者也许 Windows 内核没有公开完整的硬件功能,只允许用户空间创建最多 4 字节的观察点? (Totalview 只能调试 Linux / macOS 目标,不能调试 Windows。)
在 x86-64 上,硬件观察点支持来自调试寄存器 DR0-7。 前 4 个寄存器保存地址。 Linux 文章提到了一些关于 x86 调试寄存器的作用; 这是 x86-64 ISA 的基线部分。 我还没有听说过 CPU 提供了扩展,例如更多 DR 或通过 MSR 的备用 API,或更广泛的观察点,或类似的东西。 Totalview 和 2009 年的 Linux 论文都没有提到任何特定于 CPU 的限制。