Suggestions for Python debugging tools?

Question:

Yesterday I made a simulation using Python. I had a few difficulties with variables and debugging.

Is there any software for Python, which provides a decent debugger?

Related question: What is the best way to debug my Python code?

Answers:

You can check out the python debugger pdb, which is included in the standard library: http://docs.python.org/library/pdb.html

Answered By: sykora

I’d recommend pydb and ipython for interactive debugging.

Both have screencasts available at showmedo.com

Answered By: Ryan

Winpdb is a platform independent graphical GPL Python debugger with support for remote debugging over a network, multiple threads, namespace modification, embedded debugging, encrypted communication and is up to 20 times faster than pdb.

Features:

  • GPL license. Winpdb is Free Software.
  • Compatible with CPython 2.3 through 2.6 and Python 3000
  • Compatible with wxPython 2.6 through 2.8
  • Platform independent, and tested on Ubuntu Gutsy and Windows XP.
  • User Interfaces: rpdb2 is console based, while winpdb requires wxPython 2.6 or later.

Screenshot
(source: winpdb.org)

Answered By: nosklo

Komodo IDE (not the free Komodo Edit) comes with a debugger. I haven’t used it in over a year, but it was good back then (v 3, IIRC).

Answered By: Matthew Schinckel

There is an Eclipse plug-in for Python which supports debugging, among other tools. See the The Tutorial to start with, and the Website for download. Off course you will need to get Eclipse as well.

Answered By: Leonid

pudb is a visual debugger for python.

pudb screenshot

Answered By: miku

See official Python wiki for suggestions. Feel free to update and subscribe to receive notifications when something new comes out.

Answered By: anatoly techtonik

I used PyCharm and WingIDE for debugging, both are great.

PyCharm uses quite some RAM (it’s in Java), still, I ended up using it as I can debug doctests that I’m executing from it.

WindIDE is written in Python, I like it more than PyCharm except for the lack of running doctests.

You can also try Spyder, which I never succeeded to make work.

Answered By: Mark Horvath

As the post suggested, there are a few options:

Answered By: cizixs

Don’t forget about post-mortem debugging! After an exception is thrown, the stack frame with all of the locals is contained within sys.last_traceback. You can do pdb.pm() to go to the stack frame where the exception was thrown then p(retty)p(rint) the locals().

Here is a function that uses this information to extract the local variables from the stack.

def findlocals(search, startframe=None, trace=False):

    from pprint import pprint
    import inspect, pdb

    startframe = startframe or sys.last_traceback
    frames = inspect.getinnerframes(startframe)

    frame = [tb for (tb, _, lineno, fname, _, _) in frames
             if search in (lineno, fname)][0]

    if trace:
        pprint(frame.f_locals)
        pdb.set_trace(frame)
    return frame.f_locals

Usage:

>>> def screwyFunc():
    a = 0
    return 2/a

>>> screwyFunc()

Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    screwyFunc()
  File "<pyshell#55>", line 3, in screwyFunc
    return 2/a
ZeroDivisionError: integer division or modulo by zero
>>> findlocals('screwyFunc')
{'a': 0}
Answered By: aoeu256
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.