[Python-3000] Putting pdb.set_trace() in builtins?

Jean-Paul Calderone exarkun at divmod.com
Thu Feb 21 16:23:48 CET 2008


On Thu, 21 Feb 2008 10:01:56 -0500, Barry Warsaw <barry at python.org> wrote:
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>I know this will get shot down like a Navy missile aimed at an errant
>spy satellite, but I'm going to suggest it anyway.
>
>Several of us have been talking about merging the two Emacs Python
>modes and this prompted a discussion of Ken Manheimer's excellent
>pdbtrack hack, which got me thinking about the way I use pdb.  I don't
>know if this is typical or unique, or whether anyone else is annoyed
>the same way I am.  Admittedly it's a minor annoyance, but I still
>think we can do better.
>
>So I have some particularly troublesome code that I want to set a
>breakpoint at and start stepping through.  I usually will stick this
>tidbit at the place I want to break:
>
>     good_code()
>     import pdb; pdb.set_trace()
>     call_buggy_code()

I do this all the time, too.  Basically any time I need to use a debugger
to fix something.

>
>In doctests it's a little ickier because I have to put that all on the
>line where I want to break, not before it or doctest won't do the
>right thing, e.g.:
>
>     >>> import pdb; pdb.set_trace(); call_buggy_code()
>
>I suggest that setting a breakpoint be done with a new built-in, e.g
>breakpoint().  So now I would do this:
>
>     good_code()
>     breakpoint()
>     call_buggy_code()
>
>or
>
>     >>> breakpoint(); call_buggy_code()
>
>Yes, all it saves me is an import, but it also elevates debugging to a
>more important, and more visible location.
>
>Okay, so now that I've convinced you this is the most brilliant idea
>this century <wink>, I'm really going to smoke some crack.
>
>The other thing this should do is allow us to use different debuggers
>if we wanted.  Maybe today breakpoint() would call into pdb, but maybe
>tomorrow we'll have a better debugger, or someone will have installed
>a better debugger in site-packages (e.g. pydb).  I would suggest that
>breakpoint() consult an environment variable such as PYTHONDEBUGGER to
>see which debugger to invoke (the first time in a session only of
>course).  Perhaps you could also set PYTHONDEBUGGER=ignore to noop any
>and all calls to breakpoint.  Maybe there's a python command line
>switch to mirror $PYTHONDEBUGGER.
>
>trying-not-to-spray-hydrazine-all-over-you-ly y'rs,
>- -Barry

Wouldn't a less invasive solution be to make pdb better?  In particular,
to make `breakpoint´ actually reliably set a breakpoint?

Jean-Paul


More information about the Python-3000 mailing list