43 lines
1.4 KiB
Python
Executable File
43 lines
1.4 KiB
Python
Executable File
# A modified main pdb debugger loop (see pdb.py in the Python library!)
|
|
from pdb import *
|
|
import sys,os,traceback
|
|
|
|
def main():
|
|
mainpyfile = sys.argv[1] # Get script filename
|
|
if not os.path.exists(mainpyfile):
|
|
print 'Error:', mainpyfile, 'does not exist'
|
|
sys.exit(1)
|
|
|
|
del sys.argv[0] # Hide "pdb.py" from argument list
|
|
# Replace pdb's dir with script's dir in front of module search path.
|
|
sys.path[0] = os.path.dirname(mainpyfile)
|
|
|
|
pdb = Pdb()
|
|
# 1st customization: prompt w/ a line feed!
|
|
pdb.prompt = '(PDB)\n'
|
|
# 2nd customization: not an infinite loop!
|
|
try:
|
|
pdb._runscript(mainpyfile)
|
|
if pdb._user_requested_quit:
|
|
return
|
|
print "The program finished and will not be restarted"
|
|
except SystemExit:
|
|
# In most cases SystemExit does not warrant a post-mortem session.
|
|
print "The program exited via sys.exit(). Exit status: ",
|
|
print sys.exc_info()[1]
|
|
except:
|
|
traceback.print_exc()
|
|
print "Uncaught exception. Entering post mortem debugging"
|
|
t = sys.exc_info()[2]
|
|
while t.tb_next is not None:
|
|
t = t.tb_next
|
|
pdb.interaction(t.tb_frame,t)
|
|
|
|
|
|
# When invoked as main program, invoke the debugger on a script
|
|
if __name__=='__main__':
|
|
main()
|
|
# under Windows, we need to run Python w/ the -i flag; this ensures that we die!
|
|
sys.exit(0)
|
|
|