Esempio n. 1
0
    def __init__(self, inp=None, out=None, opts={}):

        user_opts = DEFAULT_USER_SETTINGS.copy()
        user_opts.update(opts)

        from trepan.inout import input as Minput, output as Moutput

        atexit.register(self.finalize)
        self.interactive = True  # Or at least so we think initially
        self.input = inp or Minput.DebuggerUserInput()
        self.output = out or Moutput.DebuggerUserOutput()

        if self.input.use_history():
            self.complete = user_opts['complete']
            if self.complete:
                parse_and_bind("tab: complete")
                set_completer(self.complete)
                pass
            self.histfile = user_opts['histfile']
            if self.histfile:
                try:
                    read_history_file(histfile)
                except IOError:
                    pass
                except:
                    # PyPy read_history_file fails
                    return
                set_history_length(50)
                atexit.register(write_history_file, self.histfile)
                pass
        return
Esempio n. 2
0
    def __init__(self, inp=None, out=None, opts={}):
        get_option = lambda key: Mmisc.option_set(opts, key,
                                                  DEFAULT_USER_SETTINGS)

        from trepan.inout import input as Minput, output as Moutput

        atexit.register(self.finalize)
        self.interactive = True  # Or at least so we think initially
        self.input = inp or Minput.DebuggerUserInput()
        self.output = out or Moutput.DebuggerUserOutput()

        if self.input.use_history():
            self.complete = get_option('complete')
            if self.complete:
                parse_and_bind("tab: complete")
                set_completer(self.complete)
                pass
            self.histfile = get_option('histfile')
            if self.histfile:
                try:
                    read_history_file(histfile)
                except IOError:
                    pass
                except:
                    # PyPy read_history_file may fail
                    return
                set_history_length(50)
                atexit.register(write_history_file, self.histfile)
                pass
        return
Esempio n. 3
0
    def __init__(self, script_name, out=None, opts=None):
        get_option = lambda key: Mmisc.option_set(opts, key, self.
                                                  DEFAULT_INIT_OPTS)

        atexit.register(self.finalize)
        self.script_name = script_name
        self.histfile = None
        self.input_lineno = 0
        self.input = Mscriptin.ScriptInput(script_name)
        self.interactive = False
        self.output = out or Moutput.DebuggerUserOutput()

        self.abort_on_error = get_option("abort_on_error")
        self.default_confirm = get_option("confirm_val")
        self.verbose = get_option("verbose")

        return
Esempio n. 4
0
 def __init__(self, inp=None, out=None, opts=None):
     atexit.register(self.finalize)
     self.input       = inp or Minput.DebuggerUserInput()
     self.output      = out or Moutput.DebuggerUserOutput()
     self.pp          = pprint.PrettyPrinter()
     return
Esempio n. 5
0
def process_options(debugger_name, pkg_version, sys_argv, option_list=None):
    """Handle debugger options. Set `option_list' if you are writing
    another main program and want to extend the existing set of debugger
    options.

    The options dicionary from optparser is returned. sys_argv is
    also updated."""
    usage_str = """%prog [debugger-options] [python-script [script-options...]]

    Runs the extended python debugger"""

    # serverChoices = ('TCP','FIFO', None)

    optparser = OptionParser(usage=usage_str,
                             option_list=option_list,
                             version="%%prog version %s" % pkg_version)

    optparser.add_option("-X",
                         "--trace",
                         dest="linetrace",
                         action="store_true",
                         default=False,
                         help="Show lines before executing them."
                         "This option also sets --batch")
    optparser.add_option("-F",
                         "--fntrace",
                         dest="fntrace",
                         action="store_true",
                         default=False,
                         help=("Show functions before executing them."
                               "This option also sets --batch"))
    optparser.add_option("--basename",
                         dest="basename",
                         action="store_true",
                         default=False,
                         help=("Filenames strip off basename, "
                               "(e.g. for regression tests)"))
    #     optparser.add_option("--batch", dest="noninteractive",
    #                          action="store_true", default=False,
    #                          help="Don't run interactive commands shell on "+
    #                          "stops.")
    optparser.add_option("--client",
                         dest="client",
                         action='store_true',
                         help="Connect to an existing debugger process "
                         "started with the --server option. "
                         "See options for client.")
    optparser.add_option("-x",
                         "--command",
                         dest="command",
                         action="store",
                         type='string',
                         metavar='FILE',
                         help="Execute commands from FILE.")
    optparser.add_option("--cd",
                         dest="cd",
                         action="store",
                         type='string',
                         metavar='DIR',
                         help="Change current directory to DIR.")
    optparser.add_option("--confirm",
                         dest="confirm",
                         action="store_true",
                         default=True,
                         help="Confirm potentially dangerous operations")
    optparser.add_option("--dbg_trepan",
                         dest="dbg_trepan",
                         action="store_true",
                         default=False,
                         help="Debug the debugger")
    optparser.add_option("--different",
                         dest="different",
                         action="store_true",
                         default=True,
                         help="Consecutive stops should have "
                         "different positions")
    #     optparser.add_option("--error", dest="errors", metavar='FILE',
    #                          action="store", type='string',
    #                          help="Write debugger's error output "
    #                          + "(stderr) to FILE")
    optparser.add_option("-e",
                         "--exec",
                         dest="execute",
                         type="string",
                         help="list of debugger commands to " +
                         "execute. Separate the commands with ;;")

    optparser.add_option("-H",
                         "--host",
                         dest="host",
                         default='127.0.0.1',
                         action="store",
                         type='string',
                         metavar='IP-OR-HOST',
                         help="connect IP or host name. "
                         "Only valid if --client option given.")

    optparser.add_option("--highlight",
                         dest="highlight",
                         action="store",
                         type='string',
                         metavar='{light|dark|plain}',
                         default='light',
                         help="Use syntax and terminal highlight output. "
                         "'plain' is no highlight")

    optparser.add_option("--private",
                         dest="private",
                         action='store_true',
                         default=False,
                         help="Don't register this as a global debugger")

    optparser.add_option("--post-mortem",
                         dest="post_mortem",
                         action='store_true',
                         default=True,
                         help=("Enter debugger on an uncaught (fatal) "
                               "exception"))

    optparser.add_option("--no-post-mortem",
                         dest="post_mortem",
                         action='store_false',
                         default=True,
                         help=("Don't enter debugger on an uncaught (fatal) "
                               "exception"))

    optparser.add_option("-n",
                         "--nx",
                         dest="noexecute",
                         action="store_true",
                         default=False,
                         help=("Don't execute commands found in any "
                               "initialization files"))

    optparser.add_option("-o",
                         "--output",
                         dest="output",
                         metavar='FILE',
                         action="store",
                         type='string',
                         help=("Write debugger's output (stdout) "
                               "to FILE"))
    optparser.add_option("-P",
                         "--port",
                         dest="port",
                         default=1027,
                         action="store",
                         type='int',
                         help="Use TCP port number NUMBER for "
                         "out-of-process connections.")

    optparser.add_option("--server",
                         dest="server",
                         action='store_true',
                         help="Out-of-process server connection mode")

    # optparser.add_option("--style", dest="style",
    #                      action="store", type='string',
    #                      metavar='*pygments-style*',
    #                      default=None,
    #                      help=("Pygments style; 'none' "
    #                            "uses 8-color rather than 256-color terminal"))

    optparser.add_option("--sigcheck",
                         dest="sigcheck",
                         action="store_true",
                         default=False,
                         help="Set to watch for signal handler changes")
    optparser.add_option("-t",
                         "--target",
                         dest="target",
                         help=("Specify a target to connect to. Arguments"
                               " should be of form, 'protocol address'.")),
    optparser.add_option("--from_ipython",
                         dest='from_ipython',
                         action='store_true',
                         default=False,
                         help="Called from inside ipython")

    # annotate option produces annotations, used in trepan.el for a
    # better emacs integration. Annotations are similar in purpose to
    # those of GDB (see that manual for a description), although the
    # syntax is different.  they have the following format:
    #
    # ^Z^Zannotation-name
    # <arbitrary text>
    # ^Z^Z
    #
    # where ^Z is the ctrl-Z character, and "annotname" is the name of the
    # annotation. A line with only two ^Z ends the annotation (no nesting
    # allowed). See trepan.el for the usage
    optparser.add_option("--annotate",
                         default=0,
                         type="int",
                         help="Use annotations to work inside emacs")

    # Set up to stop on the first non-option because that's the name
    # of the script to be debugged on arguments following that are
    # that scripts options that should be left untouched.  We would
    # not want to interpret and option for the script, e.g. --help, as
    # one one of our own, e.g. --help.

    optparser.disable_interspersed_args()

    sys.argv = list(sys_argv)
    # FIXME: why does this mess up integration tests?
    # (opts, sys.argv) = optparser.parse_args(sys_argv)
    (opts, sys.argv) = optparser.parse_args()
    dbg_opts = {'from_ipython': opts.from_ipython}

    # Handle debugger startup command files: --nx (-n) and --command.
    dbg_initfiles = []
    if not opts.noexecute:
        add_startup_file(dbg_initfiles)

    # As per gdb, first we execute user initialization files and then
    # we execute any file specified via --command.
    if opts.command:
        dbg_initfiles.append(opts.command)
        pass

    dbg_opts['proc_opts'] = {'initfile_list': dbg_initfiles}

    if opts.cd:
        os.chdir(opts.cd)
        pass

    if opts.output:
        try:
            dbg_opts['output'] = Moutput.DebuggerUserOutput(opts.output)
        except IOError:
            _, xxx_todo_changeme, _ = sys.exc_info()
            (errno, strerror) = xxx_todo_changeme.args
            print("I/O in opening debugger output file %s" % opts.output)
            print("error(%s): %s" % (errno, strerror))
        except:
            print("Unexpected error in opening debugger output file %s" %
                  opts.output)
            print(sys.exc_info()[0])
            sys.exit(2)
            pass
        pass

    return opts, dbg_opts, sys.argv