我正在尝试使用GDB调试C ++程序。我设置了15个断点。大多数断点都在不同的文件中。在前5个断点之后,很难记住任何给定断点所引用的代码行。
我只是想简单地回忆一下给定断点所指的内容。我觉得这很令人分心。我想知道是否有办法告诉gdb在某个断点周围显示代码。
这样的事情 - $(gdb) code 3
在断点3周围显示30行代码。今天是否可行。你能告诉我怎么样吗?
我在tui模式下运行gdb,并且还保持emacs打开以编辑我的源文件。
答案 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