def do_validate(self): if rpdb2.is_valid_pwd(self.get_password()): return True baddpwd = _("The password should begin with a letter and continue " "with any combination of digits, letters or underscores " "(\'_\'). Only English characters are accepted for letters.") PyStudioUtils.error_dialog(self, baddpwd) return False
def do_validate(self): if rpdb2.is_valid_pwd(self.get_password()): return True baddpwd = _( "The password should begin with a letter and continue " "with any combination of digits, letters or underscores " "(\'_\'). Only English characters are accepted for letters.") PyStudioUtils.error_dialog(self, baddpwd) return False
def _oncodeexecuted(self, res): """Expression execution callback""" if not res: return if len(res) == 2: warning, error = res else: error = res warning = None PyStudioUtils.error_dialog(self, error) if warning and not warning in self.ignoredwarnings: dlg = wx.MessageDialog(self, _("Would you like to ignore this warning for the rest of this session?\n\n%s") % warning,\ _("Ignore Warning"), wx.YES_NO|wx.YES_DEFAULT|wx.ICON_WARNING) if dlg.ShowModal() == wx.ID_YES: self.ignoredwarnings[warning] = True dlg.Destroy()
def _oncodeexecuted(self, res): """Expression execution callback""" if not res: return if len(res) == 2: warning, error = res else: error = res warning = None PyStudioUtils.error_dialog(self, error) if warning and not warning in self.ignoredwarnings: dlg = wx.MessageDialog(self, _("Would you like to ignore this warning for the rest of this session?\n\n%s") % warning,\ _("Ignore Warning"), wx.YES_NO|wx.YES_DEFAULT|wx.ICON_WARNING) if dlg.ShowModal() == wx.ID_YES: self.ignoredwarnings[warning] = True dlg.Destroy()
def _onitemactivatedcallback(self, res): if not res: return if len(res) == 2: warning, error = res else: error = res PyStudioUtils.error_dialog(self, error) if not warning in self.ignoredwarnings: dlg = wx.MessageDialog(self, _("%s\n\nClick 'Cancel' to ignore this warning in this session.") % warning,\ _("Warning"), wx.OK|wx.CANCEL|wx.YES_DEFAULT|wx.ICON_WARNING) res = dlg.ShowModal() dlg.Destroy() if res == wx.ID_CANCEL: self.ignoredwarnings[warning] = True
def _onitemactivatedcallback(self, res): if not res: return if len(res) == 2: warning, error = res else: error = res PyStudioUtils.error_dialog(self, error) if not warning in self.ignoredwarnings: dlg = wx.MessageDialog(self, _("%s\n\nClick 'Cancel' to ignore this warning in this session.") % warning,\ _("Warning"), wx.OK|wx.CANCEL|wx.YES_DEFAULT|wx.ICON_WARNING) res = dlg.ShowModal() dlg.Destroy() if res == wx.ID_CANCEL: self.ignoredwarnings[warning] = True
class RpdbDebugger(object): __metaclass__ = ebmlib.Singleton fAllowUnencrypted = True fRemote = False host = "localhost" fAttach = True fchdir = False password = "******" def __init__(self): super(RpdbDebugger, self).__init__() # Setup self.sessionmanager = rpdb2.CSessionManager(RpdbDebugger.password, \ RpdbDebugger.fAllowUnencrypted, RpdbDebugger.fRemote, RpdbDebugger.host) self.breakpointmanager = RpdbBreakpointsManager(self) self.statemanager = RpdbStateManager(self) self.stackframemanager = RpdbStackFrameManager(self) self.threadmanager = RpdbThreadsManager(self) self.variablesmanager = RpdbVariablesManager(self) # attributes that will be set later self.attached = False self.analyzing = False self.broken = False self.mainwindow = None self.processcreator = None self.breakpoints = {} self.breakpoints_installed = False self.curstack = {} self.unhandledexception = False self.debuggerattachedtext = None self.debuggerdetachedtext = None self.remoteprocess = False self.abortattach = False # functions that will be set later # message handler self.conflictingmodules = lambda x: None self.setstepmarker = lambda x, y: None self.clearstepmarker = lambda: None self.setstepmarker = lambda x, y: None self.restorestepmarker = lambda x: None # debuggee shelf self.debugbuttonsupdate = lambda: None self.disabledebugbuttons = lambda: None # breakpoints shelf self.saveandrestorebreakpoints = lambda: None # stackframe shelf self.clearframe = lambda: None self.selectframe = lambda x: None self.updatestacklist = lambda x: None # thread shelf self.clearthread = lambda: None self.updatethread = lambda x, y, z: None self.updatethreadlist = lambda x, y: None # variables shelf self.clearlocalvariables = lambda: None self.clearglobalvariables = lambda: None self.clearexceptions = lambda: None self.updatelocalvariables = lambda x, y: (None, None) self.updateglobalvariables = lambda x, y: (None, None) self.updateexceptions = lambda x, y: (None, None) self.catchunhandledexception = lambda: None self.updateanalyze = lambda: None # expressions shelf self.setexpression = lambda x, y: None self.restoreexpressions = lambda: None self.saveandrestoreexpressions = lambda: None self.clearexpressionvalues = lambda: None def clear_all(self): self.breakpoints_installed = False self.curstack = {} self.unhandledexception = False self.abortattach = False self.attached = False self.analyzing = False self.broken = False self.processcreator = None self.debuggerattachedtext = None self.debuggerdetachedtext = None self.clearstepmarker() self.clearframe() self.clearthread() self.clearlocalvariables() self.clearglobalvariables() self.clearexceptions() self.clearexpressionvalues() self.saveandrestoreexpressions() self.saveandrestorebreakpoints() self.updateanalyze() def isrpdbbreakpoint(self, filepath, lineno): if filepath.find("rpdb2.py") == -1: return False bpinfile = self.breakpoints.get(filepath) if not bpinfile: return True if not bpinfile.get(lineno): return True return False def attach(self, processcreator): if not processcreator: return self.processcreator = processcreator pid = str(processcreator.GetPID()) tries = 0 ex = None while tries != 5: sleep(1) util.Log("[PyDbg][info] Trying to Attach") ex = None try: if self.abortattach: self.do_abort() break self.sessionmanager.attach(pid, encoding=rpdb2.detect_locale()) self.attached = True break except Exception, ex: tries = tries + 1 ed_msg.PostMessage(ed_msg.EDMSG_PROGRESS_SHOW, (self.mainwindow.GetId(), False)) if ex: self.do_abort() err = rpdb2.g_error_mapping.get(type(ex), repr(ex)) err = "Failed to attach. Error: %s" % err util.Log("[PyDbg][err] %s" % err) wx.CallAfter(self.printerror, processcreator, err) PyStudioUtils.error_dialog(self.mainwindow, err) return util.Log("[PyDbg][info] Running") processcreator.AddText(self.debuggerattachedtext)
def printerror(self, processcreator, err): processcreator.AddText(_("\n%s\n" % err)) def attached_callsessionmanagerfn(self, fn, *args, **kwargs): if not self.attached: return None ex = None try: return fn(*args, **kwargs) except rpdb2.NotAttached, ex: self.attached = False except Exception, ex: util.Log("[PyDbg][err] %s" % traceback.format_exc()) if self.mainwindow: err = rpdb2.g_error_mapping.get(type(ex), repr(ex)) PyStudioUtils.error_dialog(self.mainwindow, err) return None def callsessionmanagerfn(self, fn, *args, **kwargs): ex = None try: return fn(*args, **kwargs) except Exception, ex: util.Log("[PyDbg][err] %s" % traceback.format_exc()) if self.mainwindow: err = rpdb2.g_error_mapping.get(type(ex), repr(ex)) PyStudioUtils.error_dialog(self.mainwindow, err) return None def do_abort(self): self.do_detach()
def printerror(self, processcreator, err): processcreator.AddText(_("\n%s\n" % err)) def attached_callsessionmanagerfn(self, fn, *args, **kwargs): if not self.attached: return None ex = None try: return fn(*args, **kwargs) except rpdb2.NotAttached, ex: self.attached = False except Exception, ex: util.Log("[PyDbg][err] %s" % traceback.format_exc()) if self.mainwindow: err = rpdb2.g_error_mapping.get(type(ex), repr(ex)) PyStudioUtils.error_dialog(self.mainwindow, err) return None def callsessionmanagerfn(self, fn, *args, **kwargs): ex = None try: return fn(*args, **kwargs) except Exception, ex: util.Log("[PyDbg][err] %s" % traceback.format_exc()) if self.mainwindow: err = rpdb2.g_error_mapping.get(type(ex), repr(ex)) PyStudioUtils.error_dialog(self.mainwindow, err) return None def do_abort(self): self.do_detach()