Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Emacs: methods for debugging python

I use emacs for all my code edit needs. Typically, I will use M-x compile to run my test runner which I would say gets me about 70% of what I need to do to keep the code on track however lately I've been wondering how it might be possible to use M-x pdb on occasions where it would be nice to hit a breakpoint and inspect things.

In my googling I've found some things that suggest that this is useful/possible. However I have not managed to get it working in a way that I fully understand.

I don't know if it's the combination of buildout + appengine that might be making it more difficult but when I try to do something like

M-x pdb
Run pdb (like this): /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/

Where .../bin/python is the interpreter buildout makes with the path set for all the eggs.

~/bin/pdb is a simple script to call into pdb.main using the current python interpreter

HellooKitty:hydrant twillis$ cat ~/bin/pdb
#! /usr/bin/env python

if __name__ == "__main__":
    import sys
    sys.version_info
    import pdb
    pdb.main()
HellooKitty:hydrant twillis$ 

.../bin/devappserver is the dev_appserver script that the buildout recipe makes for gae project and .../parts/hydrant-app is the path to the app.yaml

I am first presented with a prompt

Current directory is /Users/twillis/bin/
C-c C-f

Nothing happens but

HellooKitty:hydrant twillis$ ps aux | grep pdb
twillis    469 100.0  1.6   168488  67188 s002  Rs+   1:03PM   0:52.19 /usr/local/bin/python2.5 /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/
twillis    477   0.0  0.0  2435120    420 s000  R+    1:05PM   0:00.00 grep pdb
HellooKitty:hydrant twillis$ 

something is happening

C-x [space]

will report that a breakpoint has been set. But I can't manage to get get things going.

It feels like I am missing something obvious here. Am I?

So, is interactive debugging in emacs worthwhile? is interactive debugging a google appengine app possible? Any suggestions on how I might get this working?

like image 417
Tom Willis Avatar asked Dec 24 '10 18:12

Tom Willis


1 Answers

Hmm. You're doing this a little differently than I do. I haven't experimented with your method. I use the pdb library module directly, with no wrapper script, just using the "-m" python command-line option to tell python to run the module as a script.

To be excessively thorough, here's my sequence of operations:

  1. I hit Alt-X in EMACS, type "pdb", then return.
  2. EMACS prompts me with "Run pdb (like this):" and I type "python -m pdb myprogram.py".
  3. EMACS creates a debugger mode window for pdb, where I can give the debugger commands, and tracks the execution of the program in the source code.

I suppose it's possible there's some reason this doesn't work well with the appengine. I recommend getting it working first with a trivial python program and once you know that's working, try stepping up to the full app.

In practice, I don't do much python debugging with pdb. Most of my debugging is essentially "printf debugging", done inserting print statements into my unit tests and (occasionally) into the actual code.

like image 178
divegeek Avatar answered Oct 04 '22 05:10

divegeek