使用gdb设置多线程应用程序的监视点

Met*_*est 3 c linux x86 gdb

gdb手册说以下内容。

警告:在多线程程序中,软件观察点的用途有限。如果gdb创建了软件观察点,则它只能在单个线程中观察表达式的值。如果您确信表达式只能由于当前线程的活动而改变(并且您还确信没有其他线程可以成为当前线程),则可以照常使用软件观察点。但是,当非当前线程的活动更改表达式时,gdb可能不会注意到。(相比之下,硬件监视点监视所有线程中的表达式。)

因此,如何使用gdb将监视点与多个线程一起使用,以使gdb可以看到从任何线程对监视变量的更改?

Bas*_*tch 5

通常,软件观察点的成本确实很高。如果您正在查看地址定义明确的标量数据,则可以使用硬件观察点,例如

  p &myvar
  $1 = (int*) 0x1234556
  watch *(int*) 0x1234556
Run Code Online (Sandbox Code Playgroud)

这仅适用于简单的标量数据(单指针,单个整数,单个字节...)

  • 确保您的gdb实际上可以使用硬件监视点:((gdb)show can-use-hw-watchpoints)。 (2认同)