使用 GDB 进行调试 - 查看给定断点周围的代码



我正在尝试使用 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

最新更新