我想使用 Python 在 GDB 中编写一些行为脚本:给定一个描述一组函数的正则表达式,实例化 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 内部中断的函数。
我的问题是:是否可以挽救这些方法中的任何一种,以便它们能够可靠地工作,并且不会破坏用户在交互式 session 中设置的状态? 或者还有其他方法可以实现这一目标吗?或者我是否必须在“不破坏用户状态”方面做出妥协?
最佳答案
由于 rbreak
创建新的断点对象,即使断点与预先存在的断点位置相同,您也可以在之前和之后运行 gdb.breakpoints()
执行rbreak
来查看添加了哪些断点。
obreakpoints = gdb.breakpoints();
gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = set(gdb.breakpoints()).difference(set(obreakpoints))
关于python - 如何通过Python在GDB中通过正则表达式设置断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28163123/