def debugger(self): """Call up the pdb debugger if desired, always clean up the tb reference. If the call_pdb flag is set, the pdb interactive debugger is invoked. In all cases, the self.tb reference to the current traceback is deleted to prevent lingering references which hamper memory management. Note that each call to pdb() does an 'import readline', so if your app requires a special setup for the readline completers, you'll have to fix that by hand after invoking the exception handler.""" if self.call_pdb: if self.pdb is None: self.pdb = Debugger.Pdb() # the system displayhook may have changed, restore the original for pdb dhook = sys.displayhook sys.displayhook = sys.__displayhook__ self.pdb.reset() while self.tb.tb_next is not None: self.tb = self.tb.tb_next try: self.pdb.interaction(self.tb.tb_frame, self.tb) except IndexError: print '*** ERROR ***' print 'This version of pdb has a known bug and crashed.' print 'Returning to IPython...' sys.displayhook = dhook del self.tb
def __init__(self, color_scheme='NoColor', call_pdb=0): # Whether to call the interactive pdb debugger after printing # tracebacks or not self.call_pdb = call_pdb if call_pdb: self.pdb = Debugger.Pdb() else: self.pdb = None # Create color table self.ColorSchemeTable = ColorSchemeTable() # Populate it with color schemes C = TermColors # shorthand and local lookup self.ColorSchemeTable.add_scheme( ColorScheme( 'NoColor', # The color to be used for the top line topline=C.NoColor, # The colors to be used in the traceback filename=C.NoColor, lineno=C.NoColor, name=C.NoColor, vName=C.NoColor, val=C.NoColor, em=C.NoColor, # Emphasized colors for the last frame of the traceback normalEm=C.NoColor, filenameEm=C.NoColor, linenoEm=C.NoColor, nameEm=C.NoColor, valEm=C.NoColor, # Colors for printing the exception excName=C.NoColor, line=C.NoColor, caret=C.NoColor, Normal=C.NoColor)) # make some schemes as instances so we can copy them for modification easily: self.ColorSchemeTable.add_scheme( ColorScheme( 'Linux', # The color to be used for the top line topline=C.LightRed, # The colors to be used in the traceback filename=C.Green, lineno=C.Green, name=C.Purple, vName=C.Cyan, val=C.Green, em=C.LightCyan, # Emphasized colors for the last frame of the traceback normalEm=C.LightCyan, filenameEm=C.LightGreen, linenoEm=C.LightGreen, nameEm=C.LightPurple, valEm=C.LightBlue, # Colors for printing the exception excName=C.LightRed, line=C.Yellow, caret=C.White, Normal=C.Normal)) # For light backgrounds, swap dark/light colors self.ColorSchemeTable.add_scheme( ColorScheme( 'LightBG', # The color to be used for the top line topline=C.Red, # The colors to be used in the traceback filename=C.LightGreen, lineno=C.LightGreen, name=C.LightPurple, vName=C.Cyan, val=C.LightGreen, em=C.Cyan, # Emphasized colors for the last frame of the traceback normalEm=C.Cyan, filenameEm=C.Green, linenoEm=C.Green, nameEm=C.Purple, valEm=C.Blue, # Colors for printing the exception excName=C.Red, #line = C.Brown, # brown often is displayed as yellow line=C.Red, caret=C.Normal, Normal=C.Normal)) self.set_colors(color_scheme) self.old_scheme = color_scheme # save initial value for toggles