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

时间:2016-06-13 03:35:07

标签: debugging emacs gdb breakpoints

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

我只是想简单地回忆一下给定断点所指的内容。我觉得这很令人分心。我想知道是否有办法告诉gdb在某个断点周围显示代码。

这样的事情 - $(gdb) code 3在断点3周围显示30行代码。今天是否可行。你能告诉我怎么样吗?

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

2 个答案:

答案 0 :(得分:4)

您可以在emacs中使用gdb。

在emacs中,键入M-x gdb,输入可执行文件的名称后,键入M-x gdb-many-windows。它提供了一个类似IDE的界面,可以访问调试器,本地,源,输入/输出,堆栈帧和断点。

您可以找到参考和快照here

答案 1 :(得分:1)

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

listbreak 2

相关问题