当前位置: 首页 > 面试题库 >

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

赵永新
2023-03-14
问题内容

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

watch pObject->dPrice

产生

Hardware watchpoint 1: pObject->dPrice

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

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

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

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


问题答案:

是的你可以:

设置可以使用硬件监视点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

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



 类似资料:
  • #include <stdio.h> #include <pthread.h> #include <unistd.h> int a = 0; void *thread1_func(void *p_arg) { while (1) { a++; sleep(10); } } int m

  • #include <stdio.h> #include <pthread.h> int a = 0; void *thread1_func(void *p_arg) { while (1) { printf("%d\n", a); sleep(10); } } int main(v

  • #include <stdio.h> #include <pthread.h> int a = 0; void *thread1_func(void *p_arg) { while (1) { a++; sleep(10); } } void *thread2_func(void

  • 此外,为什么Viewmodel不能观察到它自己的LiveData的变化?

  • 3. 观察点 接着上一节的步骤,经过调试我们知道,虽然sum已经赋了初值0,但仍需要在while (1)循环的开头加上sum = 0;: 例 10.3. 观察点调试实例 #include <stdio.h> int main(void) { int sum = 0, i = 0; char input[5]; while (1) { sum = 0; scanf("%s", in

  • 我试图理解当我使用 在或之后,在我使用时返回true 我知道是一次性的。isDisposed()返回false。有人能解释一下到底发生了什么吗?。我理解一个写得很好的观察。create不能在onComplete()或onError()之后发出项。