我想使用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中破解的函数。
我的问题是:是否可以挽救其中任何一种方法,以便它们能够可靠地工作,而不是用户在交互式会话中设置的破坏状态; 或还有其他方法可以实现这一目标吗?或者我是否必须在"而不是破坏用户状态?上妥协?"
答案 0 :(得分:2)
由于rbreak
创建新的断点对象,即使断点与预先存在的断点位于相同的位置,也可以在执行gdb.breakpoints()
之前和之后运行rbreak
以查看添加了哪些断点。
obreakpoints = gdb.breakpoints();
gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = set(gdb.breakpoints()).difference(set(obreakpoints))