11b099c1dSJonas Devlieghere#!/usr/bin/env python
21b099c1dSJonas Devlieghere
31b099c1dSJonas Devlieghere
41b099c1dSJonas Devliegheredef __lldb_init_module(debugger, internal_dict):
51b099c1dSJonas Devlieghere  debugger.HandleCommand(
61b099c1dSJonas Devlieghere      'command alias in_call_stack breakpoint command add --python-function in_call_stack.in_call_stack -k name -v %1'
71b099c1dSJonas Devlieghere  )
81b099c1dSJonas Devlieghere
91b099c1dSJonas Devlieghere
101b099c1dSJonas Devliegheredef in_call_stack(frame, bp_loc, arg_dict, _):
111b099c1dSJonas Devlieghere  """Only break if the given name is in the current call stack."""
12*b6ae524cSJonas Devlieghere  name = arg_dict.GetValueForKey('name').GetStringValue(1000)
131b099c1dSJonas Devlieghere  thread = frame.GetThread()
141b099c1dSJonas Devlieghere  found = False
151b099c1dSJonas Devlieghere  for frame in thread.frames:
161b099c1dSJonas Devlieghere    # Check the symbol.
171b099c1dSJonas Devlieghere    symbol = frame.GetSymbol()
181b099c1dSJonas Devlieghere    if symbol and name in frame.GetSymbol().GetName():
191b099c1dSJonas Devlieghere      return True
201b099c1dSJonas Devlieghere    # Check the function.
211b099c1dSJonas Devlieghere    function = frame.GetFunction()
221b099c1dSJonas Devlieghere    if function and name in function.GetName():
231b099c1dSJonas Devlieghere      return True
241b099c1dSJonas Devlieghere  return False
25