![Plone 3 Products Development Cookbook](https://wfqqreader-1252317822.image.myqcloud.com/cover/451/34852451/b_34852451.jpg)
Taking advantage of an enhanced interactive Python debugger with ipdb
As a Python developer, you should already be familiar with pdb
. So think of ipdb
as a Python debugger with many of the advantages IPython provides. ipdb
, for example, is much easier to use thanks to the IPython autocomplete feature.
Note
You can find the official documentation for pdb
for Python 2.4 at http://www.python.org/doc/2.4.4/lib/module-pdb.html.
ipdb
has another very useful and important feature which is the ability to get an IPython shell in our instance console whenever we want by means of adding the /ipdb
suffix to any URL.
How to do it…
- Add the
iw.debug
line ineggs
parameter of[buildout]
part:[buildout] ... # Add additional eggs here eggs = iw.debug
- Insert an
iw.debug
line in thezcml
parameter of[instance]
part:[instance] ... # If you want to register ZCML slugs for any packages, # list them here. # e.g. zcml = my.package my.other.package zcml = iw.debug
- Rebuild your instance. We need to build our Zope instance again to let it know that there were some changes:
./bin/buildout
- Run your instance. Then run the instance in foreground mode to get a handle of its console:
./bin/instance fg
How it works…
Given that we haven't written any line of code yet, we won't call ipdb
from inside the (non-existing) code. What we need to know is that by adding these lines anywhere in the code, we will get the prompt from the improved debugger:
import ipdb; ipdb.set_trace()
But we do have a Plone site running, so let's try to get an IPython shell on demand. Access http://localhost:8080/plone/ipdb
and go to your foreground console.
There will be an ipdb
prompt waiting for you. Use the ll
command (double "L" in lowercase) to get a list of local variables. Then test some other things: context
, is the object we called ipdb
from, in our example, the Plone site. In this particular case, it also happens to be the portal
variable.
![How it works…](https://epubservercos.yuewen.com/F8F4D7/18607234808185106/epubprivate/OEBPS/Images/6729_02_03.jpg?sign=1738839191-TTkyxz0ym31D2A3cx0H1s7Pu4HTWwDtM-0-0c3ace04f03508df3e266b519085152c)
Note
More information about ipdb
can be found at: http://pypi.python.org/pypi/iw.debug.