import sys 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: process.Continue() should_stop = False dbg.SetAsync(old_async) return should_stop