Custom debugger trace hooks

R. Bernstein rocky at panix.com
Thu Dec 11 11:17:09 CET 2008


A colleague recently asked this:
 
Is there a cleaner way to dump a trace/track of running a python script. 
 With Pydb I made work-around with
 
   import pydb
   pydb.debugger(dbg_cmds=['bt', 'l', 's']*300 + ['c'])
  
   So now I have a dump of 300 steps with backtraces, so I can easily
   compare two executions of the same script to find where they diverged. I
   think it is a really nice feature.

pydb and pdb inherit from the cmd module which does allow pre- and
post-command hooks. 

Neither pdb nor pydb make it easy to add one's own hook. However

If there's something you want to run before stepping you can do that
by monkey-patching Pdb.precmd:

#################### snip
import pydb
def myprecmd(obj, debug_cmd):
    """Custom Hook method executed before issuing a debugger command."""
    global _pydb_trace
    obj.do_list('')
    obj.do_where('10')  # limit stack to at most 10 entries
    return obj.old_precmd(debug_cmd)  # is always string 's' in example below

_pydb_trace = pydb.Pdb()
pydb.Pdb.old_precmd = pydb.Pdb.precmd
pydb.Pdb.precmd = myprecmd
pydb.debugger(dbg_cmds=['s'] * 30)
# ....
####################

I believe the same is applicable to pdb, although I haven't
investigated.



More information about the Python-list mailing list