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