在Python中,如何使用交互式命令行(和可视断点?)进行调试?

时间:2013-12-12 15:08:01

标签: python debugging console interactive

我最近从Matlab转到了Python。 Python是一种更好的语言(从计算机科学家的角度来看),但Python IDE似乎都缺少一个重要的东西:

正确的交互式调试器。

我正在寻找:

  • 通过单击编辑器中的一行代码旁边以图形方式设置断点的功能。

  • 在调试器中停止时运行任何代码的能力,包括从我的代码调用函数,显示新窗口,播放音频等。

  • 发生错误时,调试器应自动在错误行打开交互式控制台。

  • 使用交互式控制台完成后,您可以恢复正常执行。

Matlab具有所有这些功能,并且它们工作得非常好,但我无法在Python工具中找到它们。

我试过了:

  • PyCharm:交互式控制台很笨重,经常无法出现,并且一直崩溃(我尝试了几个不同的版本和操作系统)。

  • IPython:无法设置断点 - 以编程方式启动Python控制台:您必须停止代码,插入额外的代码行,然后从头开始再次执行此操作。此外,您无法在不重新导入的情况下访问已导入的功能。

能够调试和修复问题他们第一次出现对我来说非常重要,因为我在通常需要几十分钟重新运行的程序(计算神经科学)中工作。

结论:目前没有办法在Python中完成所有这些工作。让我们希望PyLab的发展加速。

5 个答案:

答案 0 :(得分:4)

many Python IDEs。这是一个主题:What IDE to use for Python?

  • “通过单击编辑器中的一行代码旁边以图形方式设置断点的功能。”

PyDev有这个。双击灰色边距栏。

  • “在调试器中停止时运行任何代码的能力,包括从我的代码调用函数,显示新窗口,播放音频等等。”

PyDev has this。这不是唯一的一个。 PyScripter's stated features似乎包含了此内容。

  • “发生错误时,调试器应自动在错误行打开交互式控制台。”

PyDev这样做。 (我想。或者在最坏的情况下,您是否需要双击控制台消息,指出错误在代码中的位置?)

  • “完成交互式控制台后,您可以恢复正常执行。”

PyDev有这个。它被称为“简历”。它就是工具栏中绿色的“游戏”三角形。其他一些软件称此功能为“继续”。

答案 1 :(得分:3)

在代码的顶部,写上

import pdb

在您的代码中,在您想要调试的任何地方使用以下语句。

pdb.set_trace()

每当满足set_trace()语句时,您将拥有一个交互式shell。

然后,您可以使用step(s)next(n)continue(c)等来检查执行流程,并打印变量值print var

有关pdb的更多详细信息,请refer here

答案 2 :(得分:2)

我一直在寻找相同的东西,但不幸的是,Python IDE在这一点上并不像Matlab那样功能齐全。对于科学编程,您还希望图形/绘图在完全不同的线程中运行,因此IPython集成至关重要。据我所知,Matlab IDE功能从调试器更改工作区,然后影响随后运行的代码,这是非常独特的。每个功能都存在于 some IDE中,但并不存在:

  • Spyder与科学工具有很好的集成,但它的调试仅限于内置的pdb,它缺乏执行任何代码的要求,并且在继续之后使这些代码影响命名空间。 / LI>
  • PyDevPyCharm以及其他一些人都有不错的调试功能,但我认为它与科学工具没有很好的集成。这意味着,如果您进行绘图,则会失去对提示的访问权限。不好。

据我所知,最接近Wing IDE。它是一种支持产品,但是如果您从Matlab转换89美元/年用于非商业用途应该是可接受的(您可以先评估它)。但对我来说,我最终决定改变我的工作流程,而不是使用任何复杂的IDE。几年前我看的时候,情况可能也有所改善。

您可能也会对2013年4月的这篇文章感兴趣Evaluating IDEs for Scientific Python。它也没有真正得出结论。

答案 3 :(得分:1)

您可以在iPython Notebook中完成所有这些操作。使用magic命令%pdb在出错时停止。

答案 4 :(得分:0)

看到你是从Matlab来的,我建议你看看

Python(x,y)

该页面描述如下:

  

Python(x,y)是一个免费的科学和工程开发软件,用于基于Python编程语言,Qt图形用户界面和Spyder交互式科学开发环境的数值计算,数据分析和数据可视化。

它无法满足您的所有愿望,但当我开始使用Python时,它确实让我感觉很舒服。来自Matlab。

希望有所帮助