def test_clifns(self): """Test clifns.expanduser_abs()""" file1 = os.path.join(os.path.curdir, "test_clifns") file1 = Mclifns.path_expanduser_abs(file1) file2 = Mclifns.path_expanduser_abs("test_clifns") self.assertEqual(file1, file2, "path_expanduser_abs") self.assertTrue(Mclifns.path_expanduser_abs("~/foo")) return
def default_configfile(base_filename): '''Return fully expanded configuration filename location for base_filename. python2 and python3 debuggers share the smae directory: ~/.config/trepan.py ''' file_dir = os.path.join(os.environ.get('HOME', '~'), '.config', 'trepanpy') file_dir = Mclifns.path_expanduser_abs(file_dir) if not os.path.isdir(file_dir): os.makedirs(file_dir, mode=0o755) return os.path.join(file_dir, base_filename)
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 opt_parser is return. 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("--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) (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: # Read debugger startup file(s), e.g. $HOME/.trepan2rc and ~/.trepan2rc startup_file = ".%src" % debugger_name if Mfile.readable(os.path.join('.' , startup_file)): dbg_initfiles.append(startup_file) else: startup_home_file = os.path.join(os.environ.get('HOME', '~'), startup_file) expanded_startup_home = \ Mclifns.path_expanduser_abs(startup_home_file) if Mfile.readable(expanded_startup_home): dbg_initfiles.append(startup_home_file) pass pass # 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