[IPython-dev] making pdoc, pdef, and pinfo more generally useful (Was Re: Patches to use pydb instead of pdb for debugging)
R. Bernstein
rocky at panix.com
Sat Oct 14 06:21:12 EDT 2006
Ville M. Vainio writes:
> I'll apply them sometime next week. In the meantime, give it some more
> testing to see whether there are more gotchas.
Sure. Will do. As explained before, part (but not all) of the problem
is that you were using something I wasn't really aware of: run -d.
What else is there to test? (See below for what I tried.)
Is there a regression test or unit test framework for ipython? That's
what I use in pydb to make sure bugs don't creep in and I've found it
extremely effective.
What I tested was %pdb (and option -pdb) and post-mortem
debugging. And the pydb.runl() command I added. I've now tried "run
-d", although it has the weakness mentioned before. It also has a
weakness in that pydb debugger commands "run" and "restart" don't
work; to fix them up incrementally means going back into that awkward
code in Magic.magic_run(), shared by pdb. Since pdb doesn't have
"restart" or "run" commands, there's no *loss* for folks who use
ipython's "run -d". So my take is to let that one go for now, and have
folks use pydb.runl() if they want some sort of restart.
And speaking of that hacky magic_run code, it occurs to me that it is
also a bit wrong for debugging. It sets a permanent break on what it
determines is the first line of the Python script. So if the first
executable line is say a loop, you keep stopping at that line which I
don't think was the intent. Better would be a *temporary* breakpoint.
(And even better to remove altogether for pydb by understanding
problem(s) this code trying to address.)
> The previous bug was fixed by this:
>
> def new_do_quit(self, arg):
> - __IPYTHON__.Completer.all_completions=self.old_all_completions
> +
> + if hasattr(self, 'all_completions'):
> + __IPYTHON__.Completer.all_completions=self.old_all_completions
> return OldPdb.do_quit(self, arg)
>
> (it was AttributeError - there was no old_all_completions.
Interesting for a couple of reasons. First, yes that bug is still in
the patch I sent. So I'm glad it was brought up. Second, if you found
this in testing *with* pydb installed, it means you weren't using the
current CVS sources. Again, in the last patch I've narrowed the scope
of changes so that you now *have* to use the lastest sources,
currently only in CVS if you want pydb. Again, my take is to make a
pydb release along with the ipython release.
> Also see
> whether there is a cleaner fix).
Well, since this is only needed for pydb, you could put that in the
pydb initialization:
...
if self.is_pydb:
self.do_q = self.do_quit = decorate_fn_with_doc(self.new_do_quit,
OldPdb.do_quit)
But what's there isn't so bad either.
More information about the IPython-dev
mailing list