【问题标题】:Difference software and hardware watchpoint差异软件和硬件观察点
【发布时间】:2018-02-08 22:14:49
【问题描述】:

在阅读this documentation时,

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

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

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

【问题讨论】:

    标签: c gdb breakpoints watchpoint


    【解决方案1】:

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

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

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

    【讨论】:

    • 要记住的另一点是,通过插入中断指令来进行软件步进并不总是可行的,例如。如果代码在闪存等只读存储中。
    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多