コード例 #1
0
ファイル: forked.py プロジェクト: mm40/pudb
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)
コード例 #2
0
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]
コード例 #3
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]
コード例 #4
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]
コード例 #5
0
ファイル: __init__.py プロジェクト: idokoren1/pudb
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]
コード例 #6
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:
コード例 #7
0
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)
コード例 #8
0
ファイル: pytest_pudb.py プロジェクト: seltzered/pytest-pudb
 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))
コード例 #9
0
ファイル: pytest_pudb.py プロジェクト: seltzered/pytest-pudb
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)