def set_trace(paused=True, frame=None, term_size=None): """Set a breakpoint in a forked process on Unix system, e.g. Linux & MacOS. In- and output will be redirected to /dev/stdin & /dev/stdout. You can call pudb.forked.set_trace() directly or use it with python's built-in breakpoint(): PYTHONBREAKPOINT=pudb.forked.set_trace python … """ if frame is None: frame = sys._getframe().f_back if term_size is None: try: # Getting terminal size s = struct.unpack( "hh", fcntl.ioctl(1, termios.TIOCGWINSZ, "1234"), ) term_size = (s[1], s[0]) except Exception: term_size = (80, 24) Debugger( stdin=open("/dev/stdin"), stdout=open("/dev/stdout", "w"), term_size=term_size, ).set_trace(frame, paused=paused)
def _get_debugger(): if not CURRENT_DEBUGGER: from pudb.debugger import Debugger dbg = Debugger() CURRENT_DEBUGGER.append(dbg) return dbg else: return CURRENT_DEBUGGER[0]
def _get_debugger(**kwargs): if not CURRENT_DEBUGGER: tty_path = _tty_override() if tty_path and ("stdin" not in kwargs or "stdout" not in kwargs): tty_file, term_size = _open_tty(tty_path) kwargs.setdefault("stdin", tty_file) kwargs.setdefault("stdout", tty_file) kwargs.setdefault("term_size", term_size) from pudb.debugger import Debugger dbg = Debugger(**kwargs) CURRENT_DEBUGGER.append(dbg) return dbg else: return CURRENT_DEBUGGER[0]
def _get_debugger(**kwargs): from pudb.debugger import Debugger if not Debugger._current_debugger: tty_path = _tty_override() if tty_path and ("stdin" not in kwargs or "stdout" not in kwargs): tty_file, term_size = _open_tty(tty_path) kwargs.setdefault("stdin", tty_file) kwargs.setdefault("stdout", tty_file) kwargs.setdefault("term_size", term_size) from pudb.debugger import Debugger dbg = Debugger(**kwargs) return dbg else: return Debugger._current_debugger[0]
def _get_debugger(**kwargs): if not CURRENT_DEBUGGER: tty_path = _tty_override() user_tty = kwargs.pop('tty', None) if user_tty is not None: tty_path = user_tty if tty_path and ('stdin' not in kwargs or 'stdout' not in kwargs): tty_file, term_size = _open_tty(tty_path) kwargs.setdefault('stdin', tty_file) kwargs.setdefault('stdout', tty_file) kwargs.setdefault('term_size', term_size) from pudb.debugger import Debugger dbg = Debugger(**kwargs) CURRENT_DEBUGGER.append(dbg) return dbg else: return CURRENT_DEBUGGER[0]
def runscript(mainpyfile, args=None, pre_run="", steal_output=False): from pudb.debugger import Debugger dbg = Debugger(steal_output=steal_output) # Note on saving/restoring sys.argv: it's a good idea when sys.argv was # modified by the script being debugged. It's a bad idea when it was # changed by the user from the command line. The best approach would be to # have a "restart" command which would allow explicit specification of # command line arguments. import sys if args is not None: prev_sys_argv = sys.argv[:] sys.argv = [mainpyfile] + args # replace pudb's dir with script's dir in front of module search path. from os.path import dirname prev_sys_path = sys.path[:] sys.path[0] = dirname(mainpyfile) from pudb.settings import load_breakpoints for bpoint_descr in load_breakpoints(dbg): dbg.set_break(*bpoint_descr) while True: if pre_run: from subprocess import call retcode = call(pre_run, close_fds=True, shell=True) if retcode: print "*** WARNING: pre-run process exited with code %d." % retcode raw_input("[Hit Enter]") status_msg = "" try: dbg._runscript(mainpyfile) except SystemExit, se: status_msg = "The debuggee exited normally with status code %s.\n\n" % se.code except:
def set_trace(paused=True, frame=None, term_size=None): """Set a breakpoint in a forked process on Unix system, e.g. Linux & MacOS. In- and output will be redirected to /dev/stdin & /dev/stdout. You can call pudb.forked.set_trace() directly or use it with python's built-in breakpoint(): PYTHONBREAKPOINT=pudb.forked.set_trace python … """ if frame is None: frame = sys._getframe().f_back if term_size is None: try: # Getting terminal size s = os.get_terminal_size() term_size = (s.columns, s.lines) except Exception: term_size = (80, 24) Debugger( stdin=open("/dev/stdin"), stdout=open("/dev/stdout", "w"), term_size=term_size, ).set_trace(frame, paused=paused)
def set_trace(self, depth=1): """ wrap pudb.set_trace, dropping any IO capturing. """ self.disable_io_capture() dbg = Debugger() pudb.set_interrupt_handler() dbg.set_trace(sys._getframe(depth))
def post_mortem(tb, excinfo): dbg = Debugger() stack, i = dbg.get_stack(None, tb) dbg.reset() i = _find_last_non_hidden_frame(stack) dbg.interaction(stack[i][0], excinfo._excinfo)