我正在尝试使用 GDB 调试C++程序。我设置了 15 个断点。大多数断点位于不同的文件中。在前 5 个断点之后,很难记住任何给定断点引用的代码行。
我只是试图回忆起给定断点所指的内容,我就很挣扎。我觉得这很分散注意力。我想知道是否有办法告诉 gdb 在某个断点周围显示代码。
像这样 - $(gdb) code 3
在断点 3 周围显示 30 行代码。今天这可能吗?你能告诉我怎么做吗?
我在 tui 模式下运行 gdb,并且我还保持 emacs 打开以编辑我的源文件。
你可以在 emacs 中使用 gdb。
在 emacs 中,键入 M-x gdb
,输入可执行文件的名称后,键入 M-x gdb-many-windows
。它提供了一个类似 IDE 的接口,可以访问调试器、局部变量、源、输入/输出、堆栈帧和断点。
您可以在此处找到参考和快照。
我不认为你可以在 gdb 中完全像这样做,但它可以用 gdb python 编写脚本。
这个粗糙的脚本应该有帮助:
import gdb
class Listbreak (gdb.Command):
""" listbreak n Lists code around breakpoint """
def __init__ (self):
super(Listbreak, self).__init__ ("listbreak", gdb.COMMAND_DATA)
def invoke (self, arg, from_tty):
printed = 0
for bp in gdb.breakpoints():
if bp.number == int(arg[0]):
printed = 1
print ("Code around breakpoint " + arg[0] + " (" + bp.location + "):")
gdb.execute("list " + bp.location)
if printed == 0:
print ("No such breakpoint")
Listbreak()
将其复制到 listbreak.py,在 gdb(source listbreak.py)中获取它,然后像这样使用它:
列表中断 2