1. 程式人生 > >gdb watch 除錯時,無法watch

gdb watch 除錯時,無法watch


伺服器實際執行時, 某個物件的某個變數不知道啥時候被改掉了。  

用valgrind查了 ,沒有記憶體越界,  那就是邏輯上有問題。 


這種情況 gdb 的 watch功能就非常好用。  它能檢測記憶體中的值被改了,就會自動斷點。


現在能訪問到這個變數的地方隨便斷個點,  斷點後 watch一下這個變數地址中的內容。


但實際使用中  watch m_sid

結果 continue後  出現:

Watchpoint 2 deleted because the program has left the block in
which its expression is valid.



查了一下資料,這個情況一般是區域性變數 銷燬了, 就自動不監控了。

但我這個變數是某個物件的屬性成員啊? 奇怪。


不得已,換了一種方式:


1.先找出這個變數的地址

p &m_sid


$2 = (int32_t *) 0x74ed588


2. watch 這個地址指向的內容  (注意 不能 watch  (int32_t *) 0x74ed588, 因為這個是記憶體地址,一般不會變。)

watch *(int32_t *) 0x74ed588


即可 找到 這個變數在哪個程式碼裡被修改了。