How to use pdb?

R. Bernstein rocky at panix.com
Fri Jul 21 03:46:41 EDT 2006


tron.thomas at verizon.net writes:

> I am trying to figure out how to use the pdb module to debug Python
> programs, and I'm having difficulties.  I am pretty familiar with GDB
> which seems to be similar, 

If you are pretty familiar with gdb, try
http://bashdb.sourceforge.net/pydb. It is a great deal more similar. ;-)


> however I cannot even get the Python
> debugger to break into a program so I can step through it.  I wrote a
> simple program and below is an example of the steps I tried, as well as
> the results I got:
> 
> >>> import pdb
> >>> import MyProgram
> >>> pdb.run('MyProgram.mainFunction')
> > <string>(1)?()
> (Pdb) b MyProgram.MyClass.method
> Breakpoint 1 at MyProgram.py:8
> (Pdb) cont
> >>>
> 
> The program should have printed a message to the screen when execution
> was continued, and it should have hit the breakpoint during that
> execution.  Instead the debugger exitted to the main prompt.
> 
> What is the reason the dubugger behaves like this?

I think you misunderstand what pdb.run is supposed to do. It's not at
all like gdb's "run" command. In fact pdb doesn't even have a
debugger *command* called "run", although it does have top-level
function called "run".

pdb.run is evaluating MyProgram.mainfunction the same as if you were
to type it at Python's  >>> prompt. 

Except it will call the debugger control WHEN IT ENCOUNTERS THE FIRST
STATEMENT. I think if you were issu MyProgram.mainFunction at the
python prompt you'd get back something like: <function mainFunction at
0xb7f5c304>.

It wouldn't *call* the routine. To call it, you'd type something like
Myprogram.mainFunction()

But before you try to issue pdb.run('Myprogram.mainFunction()'), read
on. The way to use pdb.run is to insert it somewhere in your program
like MyProgram and have the debugger kick in, not something you issue
from a Python prompt.

> What is the correct way to accomplish what I am trying to do?
> 
> I have tried this process on Python 2.3.5 and 2.4.3 with the same
> results on each version.

Perhaps what you are looking for is:
  python /usr/lib/python2.4/pdb.py Myprogram.py

(Subtitute the correct path name for pdb.py.)

If you have pydb installed it adds a symbolic link to pydb.py. So here
you should be able to issue:

pydb Myprogram.py






More information about the Python-list mailing list