dotfiles/gdb/.gdbinit.d/scripts/framebp.py

38 lines
896 B
Python

# https://osa1.net/posts/2020-04-25-breakpoint-backtrace-conditionals.html
import gdb # type: ignore
class FrameBp(gdb.Breakpoint):
def __init__(self, spec, *args, frame=None, **kwargs):
self.frame = frame
super().__init__(spec, *args, **kwargs)
def stop(self):
frame = gdb.selected_frame().older()
while frame:
if frame.name() == self.frame:
return True
frame = frame.older()
return False
class FrameBP(gdb.Command):
def __init__(self):
super().__init__("framebp", gdb.COMMAND_USER)
def complete(self, _text, _word):
return gdb.COMPLETE_SYMBOL
def invoke(self, args, _from_tty):
args = args.split()
if len(args) != 2:
print("Need function name and frame as arguments")
return
FrameBp(args[0], frame=args[1])
FrameBP()