How to do a program dump - reposted
Richie Hindle
richie at entrian.com
Mon Aug 19 08:59:49 EDT 2002
> Is there a way how to do a dump ( e.g. print line and the last successully executed command
> from my Python program ) when there is a General Protection Error ?
When I have to contend with a crash like this, I use a "black box
recorder" module which logs every line executed to a file. You get
big output and tremendously slow execution, but it does tell you
where the crash happened and how the program got there. Use it like
this:
>>> import blackbox, calendar
>>> blackbox.recordTo( open( 'log.txt', 'wt' ) )
>>> calendar.weekday( 2002, 8, 19 )
0
>>> ^Z
> type log.txt
<stdin>:0
<stdin>:1
d:\python\lib\calendar.py:46
d:\python\lib\calendar.py:47
d:\python\lib\calendar.py:48
d:\python\lib\calendar.py:49
To use it in a program, call `recordTo` conditionally on a command-line
switch or something.
---------------------------- blackbox.py --------------------------
import sys
outputStream = None
def recordTo( stream ):
global outputStream
outputStream = stream
sys.settrace( globalTrace )
def globalTrace( frame, event, arg ):
if event == 'line':
outputStream.write( "%s:%d\n" % ( frame.f_code.co_filename, frame.f_lineno ) )
outputStream.flush()
elif event == 'exception':
(exception, value, traceback) = arg
outputStream.write( "%s:%d Exception: %s\n" % ( frame.f_code.co_filename, frame.f_lineno, exception ) )
outputStream.flush()
return globalTrace
-------------------------------- end ------------------------------
With a bit of extra work, you could get it to indent the log file to
reflect the call stack.
Hope that helps.
--
Richie
More information about the Python-list
mailing list