# Debugging Python(Twisted) with Emacs

<super>1</super>

- Open up your project files. sometimes emacs can't find them if you don't have them open before-hand.
- Make sure you have a program called `pdb` somewhere in your PATH, with the following contents:

      #!/bin/sh
      exec python2.3 /usr/lib/python2.3/pdb.py $1 $2 $3 $4 $5 $6 $7 $8 $9

- Run `M-x pdb` in emacs. If you usually run your program as `python foo.py`, your command line should be `pdb foo.py`, for `twistd` and `trial` just add -b to the command line, e.g.: `twistd -b -y my.tac`
- while pdb waits for your input, go to a place in your code and hit `C-x SPC` to insert a break-point. pdb should say something happy. Do this in as many points as you wish.
- Go to your pdb buffer and hit `c`; this runs as normal until a break-point is found.
- once you get to a breakpoint, use `s` to step, `n` to run the current line without stepping through the functions it calls, `w` to print out the current stack, `u` and `d` to go up and down a level in the stack, `p foo` to print result of expression `foo`.
- recommendations for effective debugging:
  - use `p self` a lot; just knowing the class where the current code is isn't enough most of the time.
  - use `w` to get your bearings, it'll re-display the current-line/arrow
  - after you use `w`, use `u` and `d` and lots more `p self` on the different stack-levels.
  - If you've got a big code-path that you need to grok, keep another buffer open and list the code-path there (e.g., I had a nasty-evil Deferred recursion, and this helped me tons)

## Footnotes

1. POKEY THE PENGUIN IS COPYRIGHT © 1998-2002 THE AUTHORS

Index

Version: 2.1.0