2

在阅读本文档时,

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

但是,我在观察点的文档中读到“GDB 通过单步执行程序并每次测试变量的值来执行软件观察点”,这基本上是我理解的硬件观察点的定义。

有人对软件和硬件观察点之间的区别有更好的理解吗?

4

1 回答 1

5

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

硬件观察点将要观察的内存字的地址放在一个特殊的调试寄存器中。CPU 检查每一次内存写入以查看它是否针对寄存器中的地址,如果是,它会中断被测程序并将控制权返回给调试器。被测程序不必是单步执行的,因此速度要快得多,但这些特殊调试寄存器通常只有少数几个,因此一次只能有一个或两个硬件观察点。

您可能对此感到困惑,因为“每次控制返回调试器时单步执行程序并检查 [某事]”听起来类似于您听到的硬件断点描述,其中 CPU 检查每条指令是否已达到断点地址。但是对于硬件断点,是CPU进行检查,而不是调试器,这要快几个数量级。硬件观察点也是如此。

于 2018-02-08T22:21:22.957 回答