我没有发现软件和硬件观察点之间的区别。我读到软件断点(不是观察点)用不正确的指令替换指令来触发中断(然后停止程序),并且硬件断点将指令的地址放在寄存器中并将其与每个指令进行比较执行指令。
但是,我正在阅读观察点的文档," GDB通过单步执行程序并每次测试变量的值来进行软件观察,这基本上就是定义我理解的硬件观点。
有人更了解软件和硬件观察点之间的区别吗?
答案 0 :(得分:3)
软件观察点是通过单步执行程序并在每次控制返回调试器时检查变量的值来实现的。这非常慢,因为它涉及在被测程序中执行的每条指令的多个上下文切换。
硬件监视点将要在特殊调试寄存器中监视的存储器字的地址放在一起。 CPU检查每个存储器写入以查看它是否以寄存器中的地址为目标,如果是,则中断被测程序并将控制权返回给调试器。被测试的程序不必是单步,因此速度要快得多,但通常只有少数这些特殊的调试寄存器,因此一次只能有一个或两个硬件观察点。 / p>
你可能会对此感到困惑,因为"单步执行程序并在每次控制返回调试器时检查[某事]"听起来类似于您听到的硬件断点的描述,其中CPU检查每个取指令是否已到达断点地址。但是使用硬件断点, CPU 进行检查,而不是调试器,这要快几个数量级。硬件观察点也是如此。