Debugging Zope exceptions with PDBDebug Mode
Whenever an exception is fired by some situation not foreseen during development, we can trace the exception in Zope logs or in the console itself. Many times during development, it's more useful to get direct access to the exception's context to better understand the problem. PDBDebugMode, a postmortem debugger, allows us to do that. It opens a pdb
prompt to let us get our hands dirty.
How to do it…
- Add a
Products.PDBDebugMode
line in theeggs
parameter of the[buildout]
part.[buildout] ... # Add additional eggs here eggs = iw.debug Products.DocFinderTab Products.Clouseau Products.PDBDebugMode
- Rebuild the Zope instance:
./bin/buildout
- Test
PDBDebugMode
. As we said earlier, from now on every time Zope fires an exception (if running in debug mode), apdb
(not anipdb
though) will prompt us to inspect the context.- For an easy test, we must first tell Zope to pay attention to (that is, not ignore) the kind of exceptions we are going to produce. Open your browser and go to
http://localhost:8080/plone/prefs_error_log_form
and delete theNotFound
line in Ignored exception types field (or you can also follow theipzope
example we included in Accessing an IPython powered shell earlier). - Then type any URL that you know doesn't exist, like
http://localhost:8080/plone/doesnt-exist
.
Now check your console. You will see a
pdb
prompt waiting for you. Unluckily, this example is not a very good one because the exception was fired by theZPublisher
(try writingself
in the console), so we can't see familiar code. - For an easy test, we must first tell Zope to pay attention to (that is, not ignore) the kind of exceptions we are going to produce. Open your browser and go to
Note
You can suffer problems with PDBDebugMode
such as triggering on at unexpected times, causing apparent slowness, or freezes. Thus, if your instance doesn't seem to be responding, check its console.
More information about PDBDebugMode
is available at: http://plone.org/products/pdbdebugmode.
See also
- Accessing an IPython powered shell