예제 #1
0
    def initialize_plugin(cls):
        global _initialized
        if _initialized:
            return

        thread_created('<' + threading.current_thread().name + '>')
        debug(debugAny, 'Loading LLDB Sublime Text 2 plugin')
        debug(debugAny, 'python version: %s' % (sys.version_info, ))
        debug(debugAny, 'cwd: %s' % os.getcwd())

        sm = SettingsManager.getSM()
        use_bundled_debugserver = sm.get_default('debugserver.use_bundled',
                                                 False)
        debugserver_path = sm.get_default('debugerver.path', None)
        global _did_not_find_debugserver
        found = False
        if debugserver_path is not None:
            # TODO: Check that it is a file
            if os.access(debugserver_path, os.X_OK):
                os.environ['LLDB_DEBUGSERVER_PATH'] = debugserver_path
                found = True
            else:
                # FIXME: Warn the user that the debugserver isn't executable
                _did_not_find_debugserver = True
        elif not use_bundled_debugserver:
            cls.find_debugserver()

        if found:
            debug(debugPlugin,
                  'debugserver path: %s' % os.environ['LLDB_DEBUGSERVER_PATH'])
        _initialized = True
예제 #2
0
    def run(self):
        thread_created('<' + self.name + '>')

        def fun(file):
            # make stdin a non-blocking file
            fd = file.fileno()
            fl = fcntl.fcntl(fd, fcntl.F_GETFL)
            fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)

        rlist = self._files
        map(fun, rlist)

        while not self.isDone() and rlist is not []:
            r, w, x = select.select(rlist, [], [], FileMonitor.TIMEOUT)
            if len(r) == 0:
                # Timeout occurred: check for self.isDone()
                continue
            for f in r:
                data = f.read()
                if data == '':
                    debug(debugMonitors, 'removing ' + str(f) + ' from FileMonitor')
                    rlist.remove(f)
                self._callback(data)

        self.setDone(True)
예제 #3
0
    def initialize_plugin(cls):
        global _initialized
        if _initialized:
            return

        thread_created('<' + threading.current_thread().name + '>')
        debug(debugAny, 'Loading LLDB Sublime Text 2 plugin')
        debug(debugAny, 'python version: %s' % (sys.version_info,))
        debug(debugAny, 'cwd: %s' % os.getcwd())

        sm = SettingsManager.getSM()
        use_bundled_debugserver = sm.get_default('debugserver.use_bundled', False)
        debugserver_path = sm.get_default('debugerver.path', None)
        global _did_not_find_debugserver
        found = False
        if debugserver_path is not None:
            # TODO: Check that it is a file
            if os.access(debugserver_path, os.X_OK):
                os.environ['LLDB_DEBUGSERVER_PATH'] = debugserver_path
                found = True
            else:
                # FIXME: Warn the user that the debugserver isn't executable
                _did_not_find_debugserver = True
        elif not use_bundled_debugserver:
            cls.find_debugserver()

        if found:
            debug(debugPlugin, 'debugserver path: %s' % os.environ['LLDB_DEBUGSERVER_PATH'])
        _initialized = True
예제 #4
0
    def run(self):
        thread_created('<' + self.name + '>')

        packet = self.get_next_packet()
        while packet:
            debug(debugMonitors, 'LLDBUIUpdater: ' + str(packet))
            if packet[0] == self.eProcessStopped:
                # state = packet[1]
                epilogue = packet[2]
                lldb_views_update(epilogue)
                # Should we wait or signal ourselves from lldb_views_refresh?
                # We'll have to signal ourselves if we find that the views get marked,
                # instead of the input box

                # Focus the best view
                # Ask for input, if appropriate (epilogue)
            elif packet[0] == self.eBreakpointAdded:
                filename = packet[1]
                line = packet[2]
                is_enabled = packet[3]

                v = self.maybe_get_view_for_file(filename)
                if v is not None:
                    sublime.set_timeout(lambda: v.mark_bp(line, is_enabled), 0)

            elif packet[0] == self.eBreakpointChanged:
                filename = packet[1]
                line = packet[2]
                is_enabled = packet[3]

                v = self.maybe_get_view_for_file(filename)
                if v is not None:
                    # Create a new scope so we don't get the line changed
                    # before change_bp is executed.
                    def scope(view, line):
                        sublime.set_timeout(lambda: view.change_bp(line, is_enabled), 0)
                    scope(v, line)

            elif packet[0] == self.eBreakpointRemoved:
                filename = packet[1]
                line = packet[2]
                is_enabled = packet[3]

                v = self.maybe_get_view_for_file(filename)
                if v is not None:
                    sublime.set_timeout(lambda: v.unmark_bp(line, is_enabled), 0)

            elif packet[0] == self.eUIUpdaterExit:
                lldb_views_destroy()
                return

            packet = self.get_next_packet()