1*99451b44SJordan Rupprechtimport lldb 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht 4*99451b44SJordan Rupprechtclass OperatingSystemPlugIn(object): 5*99451b44SJordan Rupprecht """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class 6*99451b44SJordan Rupprecht This version stops once with threads 0x111 and 0x222, then stops a second time with threads 7*99451b44SJordan Rupprecht 0x111 and 0x333.""" 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprecht def __init__(self, process): 10*99451b44SJordan Rupprecht '''Initialization needs a valid.SBProcess object. 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht This plug-in will get created after a live process is valid and has stopped for the first time. 13*99451b44SJordan Rupprecht ''' 14*99451b44SJordan Rupprecht self.process = None 15*99451b44SJordan Rupprecht self.registers = None 16*99451b44SJordan Rupprecht self.threads = None 17*99451b44SJordan Rupprecht self.times_called = 0 18*99451b44SJordan Rupprecht if isinstance(process, lldb.SBProcess) and process.IsValid(): 19*99451b44SJordan Rupprecht self.process = process 20*99451b44SJordan Rupprecht self.threads = None # Will be an dictionary containing info for each thread 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht def get_target(self): 23*99451b44SJordan Rupprecht return self.process.target 24*99451b44SJordan Rupprecht 25*99451b44SJordan Rupprecht def get_thread_info(self): 26*99451b44SJordan Rupprecht self.times_called += 1 27*99451b44SJordan Rupprecht 28*99451b44SJordan Rupprecht if self.times_called == 1: 29*99451b44SJordan Rupprecht self.threads = [{ 30*99451b44SJordan Rupprecht 'tid': 0x111, 31*99451b44SJordan Rupprecht 'name': 'one', 32*99451b44SJordan Rupprecht 'queue': 'queue1', 33*99451b44SJordan Rupprecht 'state': 'stopped', 34*99451b44SJordan Rupprecht 'stop_reason': 'none', 35*99451b44SJordan Rupprecht 'core': 1 36*99451b44SJordan Rupprecht }, { 37*99451b44SJordan Rupprecht 'tid': 0x222, 38*99451b44SJordan Rupprecht 'name': 'two', 39*99451b44SJordan Rupprecht 'queue': 'queue2', 40*99451b44SJordan Rupprecht 'state': 'stopped', 41*99451b44SJordan Rupprecht 'stop_reason': 'none', 42*99451b44SJordan Rupprecht 'core': 0 43*99451b44SJordan Rupprecht }] 44*99451b44SJordan Rupprecht else: 45*99451b44SJordan Rupprecht self.threads = [{ 46*99451b44SJordan Rupprecht 'tid': 0x111, 47*99451b44SJordan Rupprecht 'name': 'one', 48*99451b44SJordan Rupprecht 'queue': 'queue1', 49*99451b44SJordan Rupprecht 'state': 'stopped', 50*99451b44SJordan Rupprecht 'stop_reason': 'none', 51*99451b44SJordan Rupprecht 'core': 1 52*99451b44SJordan Rupprecht }, { 53*99451b44SJordan Rupprecht 'tid': 0x333, 54*99451b44SJordan Rupprecht 'name': 'three', 55*99451b44SJordan Rupprecht 'queue': 'queue3', 56*99451b44SJordan Rupprecht 'state': 'stopped', 57*99451b44SJordan Rupprecht 'stop_reason': 'none', 58*99451b44SJordan Rupprecht 'core': 0 59*99451b44SJordan Rupprecht }] 60*99451b44SJordan Rupprecht return self.threads 61*99451b44SJordan Rupprecht 62