如何通过Python在GDB中通过正则表达式设置断点
我想使用Python在GDB中编写一些行为脚本:给定一个描述一组函数的正则表达式,为每个匹配的函数实例化如何通过Python在GDB中通过正则表达式设置断点,python,gdb,Python,Gdb,我想使用Python在GDB中编写一些行为脚本:给定一个描述一组函数的正则表达式,为每个匹配的函数实例化GDB.Breakpoint(例如MyBreakpoint)的子类 GDB的Python模块中没有与rbreak等价的东西。我曾想过这样做: gdb.execute('rbreak {:s}'.format(regexp)) breakpoints = gdb.breakpoints() # Extract breakpoint strings, delete existing breakp
GDB.Breakpoint
(例如MyBreakpoint
)的子类
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内部中断的函数
我的问题是:这两种方法中的任何一种能否被挽救,以便它们能够可靠地工作,而不会破坏用户在交互会话中设置的状态或是否有其他方法实现此目的?或者我必须在“不关闭用户状态”上妥协吗?因为
rbreak
创建了新的断点对象,即使断点与先前存在的断点位于相同的位置,也可以在执行rbreak
之前和之后运行gdb.breakpoints()
,查看添加了哪些断点
obreakpoints = gdb.breakpoints();
gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = set(gdb.breakpoints()).difference(set(obreakpoints))