2009-10-14 127 views
4

我很久沒有和gdb一起工作了,這感覺就像一個基本問題。GDB結構輸出

我想,因爲它的變化,但不是破在一個特定的角度來觀察的結構,並打印出來,我寧願讓應用程序運行正常,給我結構的快照在一個特定的點。考慮執行一個操作(打印結構)而不是暫停執行的斷點。

我很感興趣,在更改結構一下子看,而不是增量。我可以通過printf得到我想要的,但gdb更優雅。

更新:感謝您對所有的答覆。我想在某個特定點觀察一個結構,命令解決方案正是我所需要的。這非常有幫助。

回答

8

一個很好的方法是設定相關的命令斷點,e.g:

break main.c:100 
commands 1 
print data_structure 
continue 
end 

這將運行兩個命令print data_structurecontinue每當到達斷點1。

+0

甚至更​​好 - 設置一個觀察點,這樣你就可以捕捉所有結構被修改的地方。 – 2009-10-14 18:07:35

+0

對 - 但原來的問題使用了兩次「特定點」這個詞。通常情況下,一個結構會經常被許多代碼所觸及,但只有一個特定的代碼是有意義的。 – Cascabel 2009-10-14 19:18:14

2

如果你的數據結構中保存的信息可能會由幾個行代碼被改變,你也可以使用gdb的watch。請注意,它非常慢,所以應該小心使用它。命令部分是一樣的。

(gdb) break main 
Breakpoint 1 at 0x80483b5: 
(gdb) run 
Breakpoint 1, main() 
(gdb) watch data_structure 
Hardware watchpoint 2: data_structure 
(gdb) commands 2 
Type commands for when breakpoint 2 is hit, one per line. 
End with a line saying just "end". 
> print data_structure 
> continue 
> end 
(gdb) continue