如何通过Python在GDB中通过正则表达式设置断点

时间:2015-01-27 04:11:59

标签: python gdb

我想使用Python在GDB中编写一些行为:给定一个描述一组函数的正则表达式,为每个匹配的函数实例化gdb.Breakpoint的子类(例如。MyBreakpoint)。 p>

GDB的Python模块中没有rbreak的等价物。我曾想过这样做:

gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = gdb.breakpoints()

# Extract breakpoint strings, delete existing breakpoints, and
# recreate them using my subclass.
for bp in breakpoints:
    loc = bp.location
    bp.delete()
    MyBreakpoint(loc)

...但是,这可能已经存在一些用户定义的断点,这会破坏它们。

我的下一个想法是迭代所有可能的函数来打破,并使用Python的re模块进行匹配。但是,似乎没有任何方法可以列出可用于在Python中破解的函数。

我的问题是:是否可以挽救其中任何一种方法,以便它们能够可靠地工作,而不是用户在交互式会话中设置的破坏状态; 还有其他方法可以实现这一目标吗?或者我是否必须在"而不是破坏用户状态?上妥协?"

1 个答案:

答案 0 :(得分:2)

由于rbreak创建新的断点对象,即使断点与预先存在的断点位于相同的位置,也可以在执行gdb.breakpoints()之前和之后运行rbreak以查看添加了哪些断点。

obreakpoints = gdb.breakpoints();
gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = set(gdb.breakpoints()).difference(set(obreakpoints))