Contents
There are multiple ways to debug a TurboGears application.
If you just want to watch the value of some objects used in your controller, you can simply add print statements which will send their output to the console while the server is running.
If you just want to break and see the values of some object, add a statement like raise ValueError(repr(some_object)). In development mode, the browser will then show a stacktrace with the Python representation of your object in the error message. If you set tg.fancy_exception = True in the global section of the project’s dev.cfg config file, the stack trace will show additional information and you can examine the value of the variables at any level of the stack trace. In this case, you can add any statement like 1/0 or breakpoint (where breakpoint is an undefined name) to raise the exception. This simple solution is often completely sufficient for debugging the application and understanding possible problems.
The standard solution is using pdb which is an interactive source code debugger for Python programs that is part of the standard library. You just need to insert
import pdb; pdb.set_trace()
at the point where you want to have a breakpoint. You can also use --pdb for nosetests, and of course use the above in them as well.
Some other simple methods have been suggested on our mailing list. One of them was using IPython and doing this:
from IPython.Shell import IPShellEmbed
dbg = IPShellEmbed()
class Root(controllers.Root):
@turbogears.expose('app.templates.method')
def method(self):
dbg() # break point
The `dbg() statement this will put your server into interactive mode which can be exited with Ctrl-D.
If you want some serious debugging, Winpdb can be used. Using Winpdb, you can do all the debugging activities like stepping through the code, watching the variables etc. in a TurboGears application. The steps to follow are described below.
Wherever you need to start the debugging, e.g. in a controller method, put these lines:
import rpdb2
rpdb2.start_embedded_debugger('some_passwd', fAllowUnencrypted=True)
Then start the TurboGears application, open a browser and visit some URL that invokes the controller method. From another console prompt, start Winpdb by giving the command winpdb -t. In Winpdb, go to File -> Attach. You will be asked for a password. Type in some password and press OK. Then select the application and press OK to start debugging.
If you’re using and IDE to develop your TurboGears application, you can try using the debugging facilities integrated in the IDE.
Fabio Zadrozny has written some instructions for Configuring Pydev to work with Turbogears. One problem that may occur due to the use of DecoratorTools in TurboGears has been discussed in the article Why can’t the pydev debugger work with turbogears?. With current versions of Python and DecoratorTools this should not be a problem any more.
Todd Whiteman has written instructions for Debugging TurboGears with Komodo.
And on the Wingware homepage, you will find instructions on Using Wing IDE with Turbogears.
The above solutions are for debugging your server side TurboGears application. If you want to debug what’s going on at the client side, get FireBug, which is an invaluable tool for debugging any web applications. It will be particularly helpful if you’re using AJAX or any JavaScript on your pages.