如何为GDB的rbreak正则断点绑定触发执行命令?
给GDB正则匹配断点(rbreak)绑定触发命令的方法
当你用rbreak通过正则匹配创建一批断点后,没法像单个break那样直接绑定命令,不过可以通过以下几种方式批量给这些断点设置触发命令:
方法1:指定断点编号范围
- 先执行
rbreak创建目标断点,比如匹配所有以Foo开头的函数:(gdb) rbreak ^Foo - 执行
info breakpoints查看这批断点的编号范围(比如输出显示断点编号从3到7) - 用
command命令后跟编号范围,批量设置命令:(gdb) command 3-7 Type commands for breakpoint(s) 3-7, one per line. End with a line saying just "end". >print $sp >continue >end
方法2:利用GDB内置变量自动匹配范围
GDB会记录最后一次rbreak创建的第一个和最后一个断点编号,分别存在$_firstbreak和$_lastbreak变量里,直接用这两个变量指定范围即可,不用手动查编号:
(gdb) rbreak ^Foo (gdb) command $_firstbreak-$_lastbreak Type commands for breakpoint(s) X-Y, one per line. End with a line saying just "end". >print $sp >continue >end
方法3:用Python脚本批量配置
如果需要更灵活的筛选(比如只给特定路径下的匹配断点加命令),可以用GDB的Python接口:
(gdb) python import gdb # 遍历所有断点,给符合条件的设置命令 for bp in gdb.breakpoints(): # 这里可以加判断,比如检查断点的函数名是否符合正则 # if re.match(r'^Foo', bp.location): bp.commands = "print $sp\ncontinue" end
内容的提问来源于stack exchange,提问作者Fraser
相关产品推荐
相关产品推荐

