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
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)
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
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()