一尘不染

设置GDB硬件观察点/如何设置软件观察点

linux

一个较早的问题解释说,在x86上,要监视的对象的大小受调试寄存器的限制。不出所料,我可以“观看”一个双变量。但例如,我看不到双重数据成员,

watch pObject->dPrice

产生

Hardware watchpoint 1: pObject->dPrice

但是当您尝试继续执行时,它说

无法插入硬件断点:您可能请求了太多的硬件断点/观察点。

即使这是 唯一的 断点/观察点。

我很好奇为什么会这样,但更重要的是有没有办法解决?根据GDB文档,如果不能使用硬件,则可以使用软件观察点。在这种情况下,它不会尝试使用软件观察点-有没有办法强迫它这样做?


阅读 516

收藏
2020-06-07

共1个答案

一尘不染

是的你可以:

设置可以使用硬件监视点0

5.1.2设置观察点开始

您可以通过set can-use-hw-watchpoints
0命令强制GDB仅使用软件观察点。通过将此变量设置为零,即使基础系统支持它们,GDB也将永远不会尝试使用硬件观察点。(请注意,在将can-use-hw-
watchpoints设置为零之前设置的硬件辅助观察点仍将使用监视表达式值的硬件机制。)

set can-use-hw-watchpoints

设置是否使用硬件观察点。

show can-use-hw-watchpoints

显示使用硬件观察点的当前模式。

2020-06-07