我有這樣的結構:在一個大的代碼的不同位置gdb的觀察點
struct A
{
int a;
char b;
};
這種結構被引用。指向這個結構體的指針被傳遞給不同的函數,並相應地更新這個結構體中的變量。我想在這個結構中的變量a上設置一個觀察點,因爲它在許多函數中傳遞。看看有什麼變化。我如何設置這個觀察點?
我有這樣的結構:在一個大的代碼的不同位置gdb的觀察點
struct A
{
int a;
char b;
};
這種結構被引用。指向這個結構體的指針被傳遞給不同的函數,並相應地更新這個結構體中的變量。我想在這個結構中的變量a上設置一個觀察點,因爲它在許多函數中傳遞。看看有什麼變化。我如何設置這個觀察點?
首先設置一個斷點在其中創建使用休息你的結構的情況下,像
break myfile.c:9
就用手錶設置觀察點,像
watch myStructInstance.a
對於變量a或
watch *0x7ffff75177f0
爲內存地址。存儲器地址可以容易地通過使用打印得到,像
print &myStructInstance.a
現在每次變量一個或給定的存儲器地址被改性的gdb將斷裂。
我在調試我的虛擬內存模擬器時遇到同樣的問題。問題是如何密切關注結構中的數據。
我試過使用打印來檢查,但那太嘈雜了。因爲我必須打印出超過15個變量。
我也嘗試過使用觀察點,但在我的機器上,我只能設置不超過4個硬件觀察點。這甚至不接近我的目標。
最後,我通過在.gdbinit文件中使用用戶定義函數來找到我的解決方案。例如如果我想看我的結構數組,使用
define lookintoStructs
if mystruct != 0x0
print mystruct[0]
print mystruct[1]
print mystruct[2]
print mystruct[3]
print mystruct[4]
print mystruct[5]
end
end
,使其更方便地使用,我想使它勾我在gdb下一個指令。
define hook-next
lookintoStructs
end
因此,當我在gdb中調用next或n時,可以自動調用lookintoStructs。對我來說工作得很好。