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

Debugging with GDB - seeing code around a given breakpoint

我正在尝试使用 GDB 调试 C++ 程序。我设置了 15 个断点。大多数断点位于不同的文件中。在前 5 个断点之后,很难记住任何给定断点指向的代码行。

我只是为了回忆给定的断点所指的内容而费了很大劲。我觉得这很让人分心。我想知道是否有办法告诉 gdb 在某个断点附近显示代码。

类似这样的东西 - $(gdb) code 3 显示断点 3 周围的 30 行代码。今天这可能吗?你能告诉我怎么做吗?

我 运行 gdb 在 tui 模式下,我还保持 emacs 打开以编辑我的源文件。

您可以在 emacs 中使用 gdb。

在 emacs 中,键入 M-x gdb,输入可执行文件的名称后,键入 M-x gdb-many-windows。它带来了一个类似于 IDE 的界面,可以访问调试器、本地、源代码、input/output、堆栈框架和断点。

您可以找到参考和快照 here

我不认为你可以在 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 中获取它(来源 listbreak.py),然后像这样使用它:

列表中断 2