像老大一样调试Python

2016-11-02 SKY 互联网
浏览

def make_pie(self, ingredients): 

    print '******WHAT IS GOING ON HERE******' 

    print ingredients 

    self.oven.preheat() 

    print self.oven.temperature 

上面的一段代码有木有很像你平常调试代码的样子?好吧,我原本也是这样。诚恳说,这并不坏。敲一些print进去,运行代码,时代站长网,然后看会产生什么。你必定必要在输出内里翻来翻去的,但你能找到你想要的功效。至少,当你知道你想要什么。不外凡是不是这样,假如你知道检讨些什么,你也许就不会必要打印那些 输出了。反而,你把一些print代码扔到你认为也许有题目的处所,然后重复的移动这些语句,知道发明真正的bug。就是二分查找嘛!

谢天谢地,有一个更好的要领。从C说话开始,有一类被称为调试器的器材在每种说话里都呈现了。Python也不破例,内里就有一个默认的调试器。尚有一些社区开拓的很酷的调试器。在接下来的内容里,我交涉谈一些较量风行的调试器材。

Pdb

debugpython2

起首来说Python里内建的调试器,pdb。它操作一个简朴的呼吁行界面,尚有许多你在用调试器时用得上的成果。辅佐体系能为你指出你能运行的呼吁,好比单法式试代码,哄骗挪用栈和配置断点。

一些它缺傲幽成果:按tab能让当地变量自动补全和让代码和栈追踪更悦目标配色和机关。

不管你最后抉择行使哪种调试器,pdb是值得你花时刻相识它的,有两个缘故起因:1)它在Python里老是可用的 2)许多其他的调试器的成果是pdb的超集,先学pdb能让你更快的进修其他的调试器。

总之,假若有更好的照旧用此外调试器吧。

Pydbgr

debugpython3

接下来是pydbgr(支持Python 3.2+ 版本),这个项目是对pydb调试器的重写。它提供了与pdb很是相似的一组呼吁,尽量云云,有一些有效的别名好比’u’暗示’up’是没有的。

这个调试器做得很好的一点是可以或许对执行流向举办细粒度地节制。你可以输入呼吁并指定数令一再执行的次数。你也可以汇报调试器在某些变乱触发时遏制,好比函数挪用和返回,这能让你镌汰许多调试的步数。

调试器的另一个特征是提供了其他调试器没有的成果,它能通过像examine 和disassemble这样的呼吁来举办很是初级此外标记搜查。说真话,我不太确定这个成果在web开拓里被证明很有效,但它能让你的事变很差异。

总之:它对pdb添加的特征我认为不是对web开拓很有效的。

pudb

debugpython4

这个调试器里最明明的亮点就是它在终端里融合了一个迷你图形界面。这很正确,这不是一个分隔的窗口,这是在终端内里。除了一组用于夸大的默认颜色(它可以或许定制或选择一组默认的主题),这在调试器的交互上是一个新奇的实行。

左边的面板表现当前文件的代码(可能你在栈里上下移动的其他文件)。导航栏很是棒,包括箭头键(以及’hjkl’对喜欢vim的群众),搜刮,而且 能用恍惚查询打开其他的模块。能把这些简朴的举动用一个快捷键团结起来执行光标位置的代码,而且有很是直观和友爱的方法来单法式试措施。虽然,pudb仍 然提供了正常的断点和单步呼吁使你能随心所愿地节制代码的执行。

在右边,有几个面板来追踪当前的当地变量,栈,和存在的断点。这在你键入 locals(),whereh可能用tab完成来反射当前框架时与典范的终端调试器很是纷歧样,

这个调试器的另一个利益是它支持过后说明。当你掷中一个非常,调试器会用一个很快的键来提醒你这个非常。它也能让你直接跳到产生了非常的那一行,同时能让栈和变量保持齐备。

总结:拥有这堆调试器里最好的用户体验;对付栈追踪出格有效。

Ipdb

debugpython5

最后一个就是iPython里的ipdb。就像它的 *pdb 的兄弟们,它的界面是一个简朴的呼吁行而且它的辅佐体系是个很是值得深入研究的处所。让这货与众差异的是它行使了一个iPython shell,以是全部的tab 完成和工具反射的成果都用,能帮你发明毕竟产生了什么。把这些与很棒的语法高亮和一个拥有最好的名目化的where呼吁团结起来,就构成了一个干掉bug 的美满器材。

总结:这是最棒的一个也是本人的最爱。

我会提到,按照环境,我切换到pudb。它确其实赏识代码是怎样运行方面是最棒的(好比当你必需钻研一个除了短处的第三方库)。而我为什么最倾向于 ipdb,是由于大部门时辰我对代码都很认识,并不必要一个大图片。我必要知道在一个指定的函数里是什么状态。把它们团结起来,就是超等超等NB的对象啦!

原文链接:https://zapier.com/engineering/debugging-python-boss/