欢迎来到天天文库
浏览记录
ID:15327099
大小:479.50 KB
页数:18页
时间:2018-08-02
《python 代码调试技巧》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Python代码调试技巧2012-5-3简介:Debug对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的bug。python提供了一系列debug的工具和包,可供我们选择。本文将主要阐述如何利用pythondebug相关工具进行debug。使用pdb进行调试pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb提供了一些常用的调试命令,详情见表1。表1.pdb常用命令命令解释break
2、或b设置断点设置断点continue或c继续执行程序list或l查看当前行的代码段step或s进入函数return或r执行代码直到从当前函数返回exit或q中止并退出next或n执行下一行pp打印变量的值help帮助下面结合具体的实例讲述如何使用pdb进行调试。清单1.测试代码示例importpdba="aaa"pdb.set_trace()b="bbb"c="ccc"final=a+b+cprintfinal开始调试:直接运行脚本,会停留在pdb.set_trace()处,选择n+enter可以执行当前的statement。在第一次按下了n+
3、enter之后可以直接按enter表示重复执行上一条debug命令。清单2.利用pdb调试[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)>/root/epdb1.py(6)?()->final=a+b+c(Pdb)list1importpdb2a="aaa"3pdb.set_trace()4b="bbb"5c="ccc"6->final=a+b+c7printfinal[E
4、OF](Pdb)[EOF](Pdb)n>/root/epdb1.py(7)?()->printfinal(Pdb)退出debug:使用quit或者q可以退出当前的debug,但是quit会以一种非常粗鲁的方式退出程序,其结果是直接crash。清单3.退出debug[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)qTraceback(mostrecentcalllast):Fi
5、le"epdb1.py",line5,in?c="ccc"File"epdb1.py",line5,in?c="ccc"File"/usr/lib64/python2.4/bdb.py",line48,intrace_dispatchreturnself.dispatch_line(frame)File"/usr/lib64/python2.4/bdb.py",line67,indispatch_lineifself.quitting:raiseBdbQuitbdb.BdbQuit打印变量的值:如果需要在调试过程中打印变量的值,可以直接使用p加
6、上变量名,但是需要注意的是打印仅仅在当前的statement已经被执行了之后才能看到具体的值,否则会报NameError:错误。清单4.debug过程中打印变量[root@rcc-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/epdb1.py(5)?()->c="ccc"(Pdb)pb'bbb'(Pdb)'bbb'(Pdb)n>/root/epdb1.py(6)?()->final=a+b+c(
7、Pdb)pc'ccc'(Pdb)pfinal***NameError:(Pdb)n>/root/epdb1.py(7)?()->printfinal(Pdb)pfinal'aaabbbccc'(Pdb)使用c可以停止当前的debug使程序继续执行。如果在下面的程序中继续有set_statement()的申明,则又会重新进入到debug的状态,读者可以在代码printfinal之前再加上set_trace()验证。清单5.停止debug继续执行程序[root@rc
8、c-pok-idg-2255~]#pythonepdb1.py>/root/epdb1.py(4)?()->b="bbb"(Pdb)n>/root/e
此文档下载收益归作者所有