Differences between revisions 4 and 5
Revision 4 as of 2006-10-17 21:55:21
Size: 2245
Editor: mauritsvanrees
Comment: Added check for being in home dir; added removal of some variables
Revision 5 as of 2006-10-17 22:13:20
Size: 2343
Editor: mauritsvanrees
Comment: Make sure home always ends with a directory separator.
Deletions are marked like this. Additions are marked like this.
Line 64: Line 64:
# Make sure home always ends with a directory separator:
home = os.path.realpath(home) + os.sep

Problem

You'd like to include Python scripts into my .pdbrc, but only pdb commands are allowed there.

Solution

Use execfile() to run a file containing your Python code.

.pdbrc may look like this:

# .pdbrc only allows for debugger commands; you cannot insert Python
# scripts.

# To overcome this restriction, this .pdbrc executes ~/.pdbrc.py,
# which can contain arbitrary Python commands (including a call to a
# local pdbrc.py (no leading dot!) in your working directory if it
# exists).

# If ~/.pdbrc.py is missing, you get an error message (which doesn't
# hurt).

execfile(os.path.expanduser("~/.pdbrc.py"))

and this is an example ~/.pdbrc.py:

print ".pdbrc.py started"

# Command line history:
import readline
histfile = ".pdb-pyhist"
try:
    readline.read_history_file(histfile)
except IOError:
    pass
import atexit
atexit.register(readline.write_history_file, histfile)
del histfile
readline.set_history_length(200)

# return to debugger after fatal exception (Python cookbook 14.5):
def info(type, value, tb):
    if hasattr(sys, 'ps1') or not sys.stderr.isatty():
        sys.__excepthook__(type, value, tb)
    import traceback, pdb
    traceback.print_exception(type, value, tb)
    print
    pdb.pm()

sys.excepthook = info

# From (on my machine) /usr/local/lib/python2.3/less user.py:
import os
home = os.curdir                        # Default
if 'HOME' in os.environ:
    home = os.environ['HOME']
elif os.name == 'posix':
    home = os.path.expanduser("~/")
elif os.name == 'nt':                   # Contributed by Jeff Bauer
    if 'HOMEPATH' in os.environ:
        if 'HOMEDRIVE' in os.environ:
            home = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH']
        else:
            home = os.environ['HOMEPATH']
# Make sure home always ends with a directory separator:
home = os.path.realpath(home) + os.sep

# Try to execute local file (if any) unless we are in the home dir.
if home != os.path.realpath(os.curdir):
    try:
        execfile("pdbrc.py")
    except IOError:
        pass

# Cleanup any variables that could otherwise clutter up the namespace.
del atexit
del home
del info
del os
del pdb
del readline
del rlcompleter

print ".pdbrc.py finished"


PythonDebuggers

PdbRcIdea (last edited 2008-11-15 14:01:17 by localhost)

Unable to edit the page? See the FrontPage for instructions.