区别软件和硬件观察点

Difference software and hardware watchpoint

正在阅读 this documentation

我没有发现软件和硬件观察点之间的区别。我读到软件断点(不是观察点)用不正确的指令替换指令以触发中断(然后停止程序),并且硬件断点将指令的地址放在寄存器中并将其与每个指令进行比较执行的指令。

但是,我正在阅读 "GDB does software watchpoint in by single-stepping your program and testing the variable's value each time" 的观察点文档,根据我的理解,这基本上是硬件观察点的定义。

有没有人更了解软件和硬件观察点之间的区别?

软件观察点是通过单步执行程序并在每次控制 returns 调试器时检查变量的值来实现的。这非常慢,因为它涉及在被测程序中执行的每条指令的多个上下文切换。

A 硬件 观察点将要观察的内存字地址放入特殊调试寄存器中。 CPU 检查每个内存写入,看它是否针对寄存器中的地址,如果是,它会中断被测程序并 returns 控制调试器。被测程序不必单步执行,所以这样会快很多,但是这些特殊的调试寄存器通常只有几个,所以你一次只能有一个或两个硬件观察点。

您可能对此感到困惑,因为 "single-stepping the program and checking [something] every time control returns to the debugger" 听起来与您听到的硬件 断点 的描述相似,其中 CPU 检查每条指令fetch 是否到达断点地址。但是对于硬件断点,是 CPU 进行检查,而不是调试器,后者要快几个数量级。硬件观察点也是如此。