2009-10-14 134 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