python - 如何通过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 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/

相关文章:

python - 如何使用Python编程语言发送带有客户端证书的https请求

c++ - 如何在 gdb 中保存设置?

c - 使用gdb--仍然找不到malloc错误

c - GDB继续命令自动化

python - "dest_directory = FLAGS.model_dir"是什么意思?

python - 使用 Python 查找唯一的数组对

python - Selenium - set_window_size() 始终返回相同大小的窗口,与指定的尺寸无关

python - 类中未定义/未实现属性的 Python "catch all"方法

gdb - 'inferior' 在术语 'inferior debugger' 中意味着什么?

c - 是否可以在 valgrind 中使用没有调试符号的可执行文件?