2011-11-08 146 views
3

gdb說明如下。使用gdb設置多線程應用程序的觀察點

警告:在多線程程序中,軟件觀察點只具有有限的用處。如果gdb創建一個軟件觀察點,它只能在單個線程中觀察表達式的值。如果您確信表達式只能由於當前線程的活動而改變(並且您確信沒有其他線程可以成爲當前活動),那麼您可以照常使用軟件觀察點。但是,當非當前線程的活動更改表達式時,gdb可能不會注意到。 (硬件觀察點,相反,在觀看所有線程的表情。)

所以,我怎麼能使用觀察點使用gdb的多線程,這樣的改變可以從任何線程觀察的變量是由GDB見過?

回答

4

一般來說,軟件觀察點真的很貴。你可以使用一個硬件檢測點,如果你正在看像

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

這僅僅是簡單的標量數據相關,其地址被很好地定義一個標量數據,東西(單指針,一個整數,單字節...)

+0

那麼,我該如何告訴gdb使用硬件觀察點而不是軟件? – MetallicPriest

+0

是gdb誰選擇它如何實現觀察點。硬件觀察點只能在極少數標量(固定)地址上使用。 –

+1

確保你的gdb實際上可以使用hw watchpoints:'(gdb)show can-use-hw-watchpoints'。 –