Debugging anything can be a real pain in the backside. However with the right tools (think firebug) it actually can become enjoyable. The other day Rob, showed me the pdb module and after using it for two secs I was loving it.
Pdb is the python debugger. It's great because it's so simple to use; don't take my word for it, let's look at an example:
To use pdb you simply need to import it and set a breakpoint. Like so:
import pdb pdb.set_trace()
Now if you add this in the middle of a piece of code and run that code. The interpreter will enter the debugger at that line.
Here's an example:
>/Users/code/Python/transmission/transmission.py(131)txcache() -> if int(time.time()) - os.path.getmtime(pickle_path) < self.max_age: (Pdb)
If I press "l" at the prompt I get some output to show where I am in the code:
(Pdb) l 126 127 import pdb 128 pdb.set_trace() 129 130 # if pickle is newer than an max_age old we'll just return it 131 -> if int(time.time()) - os.path.getmtime(pickle_path) < self.max_age: 132 return pk 133 # grab the etag and last mod data to use the request 134 else: 135 # Use the new url if it's changed - following redirection 136 if url != pk['url']: (Pdb)
And I can start printing out vars to find out what's going on:
(Pdb) print pickle_path /var/folders/v6/v6hHYTmrGBKMrHtAaaWVek+++TM/-Tmp-/e123005fdf1bfd64848c0744ec110f45 (Pdb)
There's a list of all of the pdb commands in the documentation where you can find out about all the options available.
On a side note: Pdb is also very handy for debugging Django applications as you can set a breakpoint and use the pdb prompt from where you are running the development server. Makes life a lot easier when it's a cinch to know what's going on!