Suggestions for Python debugging tools? [closed]
Asked Answered
I

10

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?

Individualism answered 25/1, 2009 at 5:14 Comment(3)
Added a link to related question.Smudge
I recommend Thonny (thonny.cs.ut.ee)Palish
I developed PySnooper, which can be a useful alternative to a full-blown debugger: github.com/cool-RR/PySnooperCastalia
E
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}
Earwax answered 20/8, 2014 at 16:0 Comment(1)
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.Swihart
M
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)

Malemute answered 25/1, 2009 at 5:53 Comment(0)
N
29

pudb is a visual debugger for python.

pudb screenshot

Ninebark answered 20/6, 2011 at 22:39 Comment(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 itBenjamin
python -m pudb script.py and you are debugging the code without modifying itSaporous
E
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}
Earwax answered 20/8, 2014 at 16:0 Comment(1)
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.Swihart
G
13

As the post suggested, there are a few options:

Grammar answered 24/3, 2014 at 7:22 Comment(1)
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?Terryterrye
P
11

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

Padraic answered 25/1, 2009 at 5:18 Comment(0)
F
8

I'd recommend pydb and ipython for interactive debugging.

Both have screencasts available at showmedo.com

Fortieth answered 25/1, 2009 at 5:20 Comment(3)
Is there a tutorial you'd recommend for getting started?Psychognosis
Yup, the showmedo screencasts.Fortieth
pydb is now called trepan. See pypi.python.org/pypi/trepan or pypi.python.org/pypi/trepan3k. (When Polish-speaking people tell you your name is unpronounceable, it's time to change the name)Colloquialism
T
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).

Tanganyika answered 25/1, 2009 at 7:55 Comment(3)
Komodo has definitely been nice for debugging.Devoe
How does the debugger differ in Komodo Edit from the one in Komodo IDE? For me, the Komodo Edit solved three indentation problems fast taday.Swihart
Maybe they've added it in the newer version. It definitely didn't have one 18 months ago!Tanganyika
P
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.

Pugh answered 5/9, 2010 at 11:38 Comment(0)
T
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.

Tuberculous answered 21/6, 2013 at 15:54 Comment(2)
+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!Motherwell
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.Earwax
H
2

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

Hemidemisemiquaver answered 21/5, 2012 at 9:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.