在阅读这份文件时,
我没有发现软件和硬件监视点之间的区别。我读到,软件断点(而不是观察点)用不正确的指令替换指令,以触发中断(然后停止程序),硬件断点将指令的地址放在寄存器中,并将其与每条执行的指令进行比较。
然而,我在观察点的文档中读到"GDB通过单步执行程序并每次测试变量的值来完成软件监视点“,这基本上是我所理解的硬件监视点的定义。
有人能更好地理解软件和硬件之间的区别吗?
发布于 2018-02-08 22:21:22
通过单步执行程序并在每次控件返回调试器时检查变量的值来实现软件监视点。这是非常慢的,因为它涉及多个上下文切换的每一条指令在被测试程序中执行。
硬件监视点将内存字的地址放在特殊的调试寄存器中监视。CPU检查每个内存写入是否针对寄存器中的地址,如果是的话,它会中断正在测试的程序并将控制返回到调试器。测试中的程序不需要单步执行,因此速度要快得多,但是通常只有几个特殊的调试寄存器,所以一次只能有一个或两个硬件监视点。
您可能对此感到困惑,因为“单步执行程序并在每次控件返回调试器时检查某些内容”听起来类似于您所听到的硬件断点的描述,其中CPU在每次获取指令时检查它是否已到达断点地址。但是,对于硬件断点,检查是CPU做的,而不是调试器,它比调试器快几个数量级。还有一个硬件监视点。
https://stackoverflow.com/questions/48695665
复制相似问题