我很久没有和gdb一起工作了,这感觉就像一个基本问题。GDB结构输出
我想,因为它的变化,但不是破在一个特定的角度来观察的结构,并打印出来,我宁愿让应用程序运行正常,给我结构的快照在一个特定的点。考虑执行一个操作(打印结构)而不是暂停执行的断点。
我很感兴趣,在更改结构一下子看,而不是增量。我可以通过printf得到我想要的,但gdb更优雅。
更新:感谢您对所有的答复。我想在某个特定点观察一个结构,命令解决方案正是我所需要的。这非常有帮助。
我很久没有和gdb一起工作了,这感觉就像一个基本问题。GDB结构输出
我想,因为它的变化,但不是破在一个特定的角度来观察的结构,并打印出来,我宁愿让应用程序运行正常,给我结构的快照在一个特定的点。考虑执行一个操作(打印结构)而不是暂停执行的断点。
我很感兴趣,在更改结构一下子看,而不是增量。我可以通过printf得到我想要的,但gdb更优雅。
更新:感谢您对所有的答复。我想在某个特定点观察一个结构,命令解决方案正是我所需要的。这非常有帮助。
一个很好的方法是设定相关的命令断点,e.g:
break main.c:100
commands 1
print data_structure
continue
end
这将运行两个命令print data_structure
和continue
每当到达断点1。
如果你的数据结构中保存的信息可能会由几个行代码被改变,你也可以使用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
甚至更好 - 设置一个观察点,这样你就可以捕捉所有结构被修改的地方。 – 2009-10-14 18:07:35
对 - 但原来的问题使用了两次“特定点”这个词。通常情况下,一个结构会经常被许多代码所触及,但只有一个特定的代码是有意义的。 – Cascabel 2009-10-14 19:18:14