Minimal debug/rep functionality

Mark Hobbes2176 at yahoo.com
Thu Sep 19 06:16:33 CEST 2002


Okay, here's my first stab:

from bdb import *

class Mdb(Bdb):
    def user_call(self, frame, args):
        name = frame.f_code.co_name
        if not name: name = '???'
    def user_line(self, frame):
        import linecache
        name = frame.f_code.co_name
        if not name: name = '???'
        fn = self.canonic(frame.f_code.co_filename)
        line = linecache.getline(fn, frame.f_lineno)
        print '+++', frame.f_lineno, name, ':', line.strip()
    def user_return(self, frame, retval):
        None
    def user_exception(self, frame, exc_stuff):
        self.set_continue()

This is copied out of bdb.py and modified from the Tdb class.

To use it, you simply:

import mdb # contains definition of Mdb
import foo # contains function to trace
m = mdb.Mdb()
m.run('foo.main()') # main() is the method I'd like to trace

and out pops a list like (things are a hair cleaner if the input is done 
from a file instead of interactively):

+++ <line number> <code on that line>

My next wish is to NOT have it step into functions .... this isn't a real 
biggie but it would help eliminate some (soon to be) volumious output.

Regards,
Mark



More information about the Python-list mailing list