我长时间没有使用gdb,这感觉就像一个基本问题。
我正在尝试观察一个结构,因为它发生了变化,而不是在某个特定点打破并打印出来,我宁愿让应用程序正常运行,并在特定点给我一个结构的快照。想一个执行动作(打印结构)而不是暂停执行的断点。
我有兴趣一次性查看结构的变化而不是逐步变化。我可以通过printf获得我想要的东西,但gdb更优雅。
更新:感谢您的回复。我想在特定点观察一个结构,命令解决方案就是我需要的。这非常有帮助。
答案 0 :(得分:8)
一个很好的方法是使用相关命令设置断点,例如:
break main.c:100
commands 1
print data_structure
continue
end
每当达到断点1时,它会运行两个命令print data_structure
和continue
。
答案 1 :(得分: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