import lldb
def stop_if_called_from_a(frame, bp_loc, dict):
thread = frame.GetThread()
process = thread.GetProcess()
target = process.GetTarget()
dbg = target.GetDebugger()
# Perform synchronous interaction with the debugger.
old_async = dbg.GetAsync()
dbg.SetAsync(True)
# We check the call frames in order to stop only when the immediate caller
# of the leaf function c() is a(). If it's not the right caller, we ask the
# command interpreter to continue execution.
should_stop = True
if thread.GetNumFrames() >= 2:
if (
thread.frames[0].function.name == "c"
and thread.frames[1].function.name == "a"
):
should_stop = True
else:
should_stop = False
dbg.SetAsync(old_async)
return should_stop