예제 #1
0
  def __init__(self, vimx):
    """ Creates the LLDB SBDebugger object and more! """
    import logging
    self.logger = logging.getLogger(__name__)
    self.logger.setLevel(logging.INFO)

    self._sink = open('/dev/null')
    self._dbg = lldb.SBDebugger.Create()
    self._dbg.SetOutputFileHandle(self._sink, False)
    self._ipreter = self._dbg.GetCommandInterpreter()

    self._rcx = lldb.SBListener("the_ear") # receiver
    self._trx = lldb.SBBroadcaster("the_mouth") # transmitter for user events
    self._trx.AddListener(self._rcx, self.CTRL_VOICE)

    self._target = None
    self._process = None
    self._num_bps = 0

    self.in_queue = Queue(maxsize=2)
    self.out_queue = Queue(maxsize=1)

    self.vimx = vimx
    self.busy_stack = 0 # when > 0, buffers are not updated
    self.buffers = VimBuffers(vimx)
    self.session = Session(self, vimx)

    super(Controller, self).__init__() # start the thread
예제 #2
0
def fuzz_obj(obj):
    obj.AddEvent(lldb.SBEvent())
    obj.StartListeningForEvents(lldb.SBBroadcaster(), 0xffffffff)
    obj.StopListeningForEvents(lldb.SBBroadcaster(), 0xffffffff)
    event = lldb.SBEvent()
    broadcaster = lldb.SBBroadcaster()
    obj.WaitForEvent(5, event)
    obj.WaitForEventForBroadcaster(5, broadcaster, event)
    obj.WaitForEventForBroadcasterWithType(5, broadcaster, 0xffffffff, event)
    obj.PeekAtNextEvent(event)
    obj.PeekAtNextEventForBroadcaster(broadcaster, event)
    obj.PeekAtNextEventForBroadcasterWithType(broadcaster, 0xffffffff, event)
    obj.GetNextEvent(event)
    obj.GetNextEventForBroadcaster(broadcaster, event)
    obj.GetNextEventForBroadcasterWithType(broadcaster, 0xffffffff, event)
    obj.HandleBroadcastEvent(event)
 def test_SBBroadcaster(self):
     obj = lldb.SBBroadcaster()
     if self.TraceOn():
         print obj
     self.assertFalse(obj)
     # Do fuzz testing on the invalid obj, it should not crash lldb.
     import sb_broadcaster
     sb_broadcaster.fuzz_obj(obj)
    def test_dwarf_symbol_loading_progress_report(self):
        """Test that we are able to fetch dwarf symbol loading progress events"""
        self.build()

        test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test')
        listener_thread = threading.Thread(target=self.fetch_events,
                                           args=[test_broadcaster])
        listener_thread.start()

        lldbutil.run_to_source_breakpoint(self, 'break here',
                                          lldb.SBFileSpec('main.c'))

        test_broadcaster.BroadcastEventByType(
            self.eBroadcastBitStopProgressThread)
        listener_thread.join()

        self.assertTrue(len(self.progress_events) > 0)
    def test_dwarf_symbol_loading_progress_report(self):
        """Test that we are able to fetch dwarf symbol loading progress events"""
        self.build()

        self.listener = lldb.SBListener("lldb.progress.listener")
        self.test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test')
        self.listener.StartListeningForEvents(self.test_broadcaster,
                                              self.eBroadcastBitStopProgressThread)

        self.progress_broadcaster = self.dbg.GetBroadcaster()
        self.progress_broadcaster.AddListener(self.listener, lldb.SBDebugger.eBroadcastBitProgress)

        listener_thread = threading.Thread(target=self.fetch_events)
        listener_thread.start()

        lldbutil.run_to_source_breakpoint(self, 'break here', lldb.SBFileSpec('main.c'))

        self.test_broadcaster.BroadcastEventByType(self.eBroadcastBitStopProgressThread)
        listener_thread.join()

        self.assertGreater(len(self.progress_events), 0)
예제 #6
0
    def test_dwarf_symbol_loading_diagnostic_report(self):
        """Test that we are able to fetch diagnostic events"""
        self.listener = lldb.SBListener("lldb.diagnostic.listener")
        self.test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test')
        self.listener.StartListeningForEvents(
            self.test_broadcaster, self.eBroadcastBitStopDiagnosticThread)

        self.diagnostic_broadcaster = self.dbg.GetBroadcaster()
        self.diagnostic_broadcaster.AddListener(
            self.listener, lldb.SBDebugger.eBroadcastBitWarning)
        self.diagnostic_broadcaster.AddListener(
            self.listener, lldb.SBDebugger.eBroadcastBitError)

        listener_thread = threading.Thread(target=self.fetch_events)
        listener_thread.start()

        self.yaml2obj("minidump.yaml", self.getBuildArtifact("minidump.core"))

        self.dbg.CreateTarget(None)
        self.target = self.dbg.GetSelectedTarget()
        self.process = self.target.LoadCore(
            self.getBuildArtifact("minidump.core"))

        self.test_broadcaster.BroadcastEventByType(
            self.eBroadcastBitStopDiagnosticThread)
        listener_thread.join()

        self.assertEquals(len(self.diagnostic_events), 1)

        diagnostic_event = self.diagnostic_events[0]
        self.assertEquals(
            diagnostic_event.GetValueForKey("type").GetStringValue(100),
            "warning")
        self.assertEquals(
            diagnostic_event.GetValueForKey("message").GetStringValue(100),
            "unable to retrieve process ID from minidump file, setting process ID to 1"
        )