使用gdb设置multithreading应用程序的观察点

gdb说明如下。

警告:在multithreading程序中,软件观察点只有有限的用处。 如果gdb创build一个软件观察点,它只能在单个线程中观察expression式的值。 如果您确信expression式只能由于当前线程的活动而改变(如果您还确信没有其他线程可以成为最新的),那么您可以照常使用软件观察点。 但是,当非当前线程的活动更改expression式时,gdb可能不会注意到。 (硬件观察点,相反,在所有线程中观察expression式。)

那么,如何使用gdb使用多个线程的观察点,使得gdb可以从任何线程切换到监视的variables?

一般来说,软件观察点确实很昂贵。 如果您正在观看地址已定义好的标量数据,则可以使用硬件观察点

p &myvar $1 = (int*) 0x1234556 watch *(int*) 0x1234556 

这只适用于简单标量数据(单个指针,单个整数,单个字节…)