[Zope] Debugging tip: Actual HTTP Request with PDB & emacs, also applicable to other IDEs

Chris McDonough chrism@digicool.com
Wed, 11 Apr 2001 03:07:08 -0400


Hi Andrew,

I'm not sure if you've seen Ken Manheimer's pdbtrack utility at
http://www.zope.org/Wikis/klm/EmacsGoodies , but I love it.  It does
approximately what you describe as well...

- C



----- Original Message -----
From: "Andrew Athan" <aathan-zope-list%REMOVEME@memeplex.com>
To: "Zope@Zope. Org" <zope@zope.org>
Sent: Wednesday, April 11, 2001 2:36 AM
Subject: [Zope] Debugging tip: Actual HTTP Request with PDB & emacs, also
applicable to other IDEs


>
> Perhaps I am missing some basic technique, but I don't believe this is
> documented anywhere, including the numerous debugging how-to's I've read.
>
> First, this simple technique for debugging Zope & Zope products within
emacs
> amounts to:
>
> 1) Make some simple changes to emacs configs
> 2) Make some simple changes to Zope so that it handles requests single
> threaded
> 3) Specify where in the Zope (or your) code the debugger should start
> 4) Run pdb-mode in emacs, telling it to start Zope
>
> I don't think Test.py cuts it for me because I want to be able to see the
> response in a browser, and I like to interact with the dugger in an IDE
(for
> me, emacs).  The big problem was that the default PubCore behavior
involves
> a separate thread which handles the request, and this wreaks havoc on pdb
&
> on emacs' comint mode.  The details have to do with the fact that pdb does
> not track thread creation & switching, etc.
>
> So, now the details:
>
> 1) Make some simple changes to emacs configs
> 1.A) I assume you're running the latest emacs with decently current python
&
> gud modes.
> 1.B) Put this into your .emacs if you're running on win32: (setq
> gud-pdb-marker-regexp
>   "^>
>
\\([-a-zA-Z0-9_/.:\\]*\\|<string>\\)(\\([0-9]+\\))\\([a-zA-Z0-9_]*\\|\\?\\)(
> )\\(->[^\n]*\\)?\n")
>
> 2) Make some simple changes to Zope so that it handles requests single
> threaded
>    This amounts to replacing the contents of __init__.py in PubCore with
the
> lines following the ============= at the bottom of this message
>
> 3) Specify where in the Zope (or your) code the debugger should start
> Put
> import pdb
> at the very top of one of the Zope product files, even at the top of z2.py
> and
> pdb.set_trace()
> at the spot you want to start debugging from.  I bet with some name space
> trickery you can make this happen inside a DTML document.  Haven't tried
> yet.
>
> 4) Run pdb-mode in emacs, telling it to start Zope
>    M-x pdb
> enter the following as the command, assuming a win32 platform and my
setup:
>    D:\Zope\bin\python.exe -i D:\Zope\z2.py -D -t 1
>
> When your set_trace() call gets hit, you will be dropped into the
debugger,
> and emacs will load the right file and move around with you as you use
> debugging commands.  Enter "continue" and Zope will go along its merry way
> and return the results of your page to the browser, and wait for the next
> request.
>
> I hope this saves someone the 2 hours of reading Zope, medusa, and other
> sources that I spent.
>
> If this is totally misguided and there is a simpler technique, I'm all
> ears!!
>
> A.
>
>
> ===================
>
> import ZRendezvous
> from ZPublisher import publish_module
>
> _handle=None
> _n=1
>
> def _simple_handle(name,request,response):
>     print name,request,response
>     try:
>         publish_module(
>             name,
>             request=request,
>             response=response)
>     finally:
>         response._finish()
>
> def handle(*args, **kw):
>     global _handle
>     global _n
>
>     if _handle is None:
>         if _n==1:
>             _handle = _simple_handle
>         else:
>             _handle=ZRendezvous.ZRendevous(_n).handle
>
>     return apply(_handle, args, kw)
>
> def setNumberOfThreads(n):
>     global _n
>     _n=n
>     global setNumberOfThreads
>     del setNumberOfThreads
>
>
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )
>