45

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?

Community
  • 1
  • 1
Léo Léopold Hertz 준영
  • 134,464
  • 179
  • 445
  • 697

10 Answers10

33

Winpdb (archived link / SourceForge.net / Google Code Archive) 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.

Alternative: Fork of the official winpdb (winpdb-reborn · PyPI / GitHub)

Screenshot
(source: winpdb.org)

nosklo
  • 217,122
  • 57
  • 293
  • 297
29

pudb is a visual debugger for python.

pudb screenshot

miku
  • 181,842
  • 47
  • 306
  • 310
  • 2
    pudb is all I've ever wanted in a debugging tool. regular pdb is just not user friendly. pudb gives the visual feedback I need. Thanks for suggesting it – Eldamir Jan 31 '18 at 11:01
  • 2
    `python -m pudb script.py` and you are debugging the code without modifying it – Fibo Kowalsky Sep 21 '18 at 22:24
19

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}
aoeu256
  • 385
  • 3
  • 7
  • I like this answer much! It reminds me the new outstanding answer in one thread of mine about Python local modules where it took about 5 years that we got forward. It would be great if you can compare and contrast your answer to JackWu's answer. – Léo Léopold Hertz 준영 Aug 20 '14 at 16:11
12

As the post suggested, there are a few options:

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
cizixs
  • 12,931
  • 6
  • 48
  • 60
  • I find the visual debugger built into Spyder IDE very handy for scientific debugging esp involving matrices. Maybe you could add that to your answer? – shaunakde Aug 13 '20 at 13:08
11

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

sykora
  • 96,888
  • 11
  • 64
  • 71
8

I'd recommend pydb and ipython for interactive debugging.

Both have screencasts available at showmedo.com

Ryan
  • 15,016
  • 6
  • 48
  • 50
  • Is there a tutorial you'd recommend for getting started? – prairiedogg Jan 25 '09 at 06:31
  • Yup, the showmedo screencasts. – Ryan Jan 25 '09 at 20:58
  • 2
    pydb is now called trepan. See https://pypi.python.org/pypi/trepan or https://pypi.python.org/pypi/trepan3k. (When Polish-speaking people tell you your name is unpronounceable, it's time to change the name) – rocky Oct 21 '15 at 02:05
6

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).

Matthew Schinckel
  • 35,041
  • 6
  • 86
  • 121
3

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.

Mark Horvath
  • 1,136
  • 1
  • 9
  • 24
  • +1 for PyCharm, super easy to set breakpoints. Plus, I find it especially useful for Django projects. It's also free for open source projects! – Fiver Jun 22 '13 at 03:06
  • For web projects Werkzeug seems awesome, its like a Python console right in your browser that can access your locals. You can code right in Werkzeug then when you get your code right you can copy/paste it into your editor. – aoeu256 Sep 21 '19 at 17:40
3

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.

Leonid
  • 22,360
  • 25
  • 67
  • 91
2

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

anatoly techtonik
  • 19,847
  • 9
  • 124
  • 140