Python调试工具的建议?

45

添加了一个相关问题的链接。 - jfs
我推荐使用Thonny(http://thonny.cs.ut.ee)。 - Aivar
我开发了PySnooper,它可以作为完整调试器的有用替代品:https://github.com/cool-RR/PySnooper/ - Ram Rachum
10个回答

33

Winpdb存档链接 / SourceForge.net / Google Code Archive)是一个平台无关的图形化GPL Python调试器,支持通过网络进行远程调试,多线程,命名空间修改,嵌入式调试,加密通信,并且比pdb快20倍。

特点:

  • GPL许可证。Winpdb是自由软件。
  • 兼容CPython 2.3至2.6和Python 3000
  • 兼容wxPython 2.6至2.8
  • 平台无关,并在Ubuntu Gutsy和Windows XP上进行了测试。
  • 用户界面:rpdb2基于控制台,而winpdb需要wxPython 2.6或更高版本。

替代方案:官方winpdb的分支winpdb-reborn · PyPI / GitHub

屏幕截图
(来源:winpdb.org


29

pudb是Python的可视化调试器。

pudb截图


2
pudb是我一直想要的调试工具。普通的pdb不够用户友好。pudb给了我需要的视觉反馈。感谢您建议它。 - Eldamir
2
python -m pudb script.py,你可以在不修改代码的情况下进行调试。 - Fibo Kowalsky

19
不要忘记事后调试!在抛出异常后,包含所有局部变量的堆栈帧都在sys.last_traceback中。您可以使用pdb.pm()进入引发异常的堆栈帧,然后打印locals()
这里有一个使用此信息从堆栈中提取局部变量的函数。
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

使用方法:

>>> 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}

我非常喜欢这个答案!它让我想起了我的一个关于Python本地模块的帖子中的新杰出答案,我们花了大约5年时间才取得进展。如果您能将您的答案与JackWu的答案进行比较和对比,那就太好了。 - Léo Léopold Hertz 준영

12

我发现Spyder IDE内置的可视化调试器对于涉及矩阵的科学调试非常方便。也许你可以把这个加入到你的回答中? - shaunakde

11

8

你有什么推荐的入门教程吗? - prairiedogg
是的,showmedo的屏幕录像。 - Ryan
2
pydb现在被称为trepan。请参阅https://pypi.python.org/pypi/trepan或https://pypi.python.org/pypi/trepan3k。(当波兰人告诉你他们无法发音你的名字时,是时候更改名字了) - rocky

6

Komodo IDE(不是免费的Komodo Edit)附带有调试器。虽然我已经一年没有使用过它了,但在那时(我IRC 3版),它表现不错。


Komodo对于调试绝对是非常好用的。 - David
调试器在Komodo Edit和Komodo IDE中有何不同? 对我来说,今天Komodo Edit快速解决了三个缩进问题。 - Léo Léopold Hertz 준영
也许他们在新版本中已经添加了它。18个月前肯定没有这个功能! - Matthew Schinckel

3

我使用过PyCharm和WingIDE进行调试,两者都非常出色。

由于PyCharm是基于Java编写的,因此它会占用相当多的内存。但最终我还是选择了它,因为我可以从中执行doctest并进行调试。

WingIDE是使用Python编写的,我比较喜欢它,但缺点是无法运行doctest。

你也可以尝试Spyder,不过我一直没成功过。


+1 for PyCharm,设置断点非常容易。此外,我发现它在Django项目中特别有用。而且,对于开源项目来说它是免费的! - Fiver
对于 Web 项目,Werkzeug 似乎非常棒,就像是一个 Python 控制台在你的浏览器中,可以访问你的本地变量。你可以直接在 Werkzeug 中编写代码,然后当你将代码编写正确后,可以将其复制/粘贴到你的编辑器中。 - aoeu256

3

有一个针对Python的Eclipse插件,支持调试等工具。请参考教程开始使用,并在官网下载。当然,您也需要下载Eclipse


2

请参考官方Python维基中的建议。随时更新并订阅以接收新内容发布的通知。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接