你能通过Python代码来帮助debugging问题吗?
在java / c#中,您可以轻松地通过代码来追踪可能出错的地方,而且IDE使得这个过程非常友好。
你能跟踪类似的Python代码吗?
是! 有一个名为pdb
的Pythondebugging器只是为了做到这一点!
您可以使用pdb myscript.py
或python -m pdb myscript.py
通过pdb
启动Python程序。
您可以发出几条命令,这些命令logging在pdb
页面上。
一些有用的记住是:
-
b
:设置一个断点 -
c
:继续debugging,直到你到达一个断点 -
s
:遍历代码 -
n
:转到下一行代码 -
l
:列出当前文件的源代码(默认:11行,包括正在执行的行) -
u
:导航一个堆栈帧 -
d
:向下导航一个堆栈帧 -
p
:在当前上下文中打印expression式的值
如果你不想使用命令行debugging器,一些像Pydev这样的IDE有一个GUIdebugging器。
python中有一个叫做“pdb”的模块。 在你的python脚本的顶部
import pdb pdb.set_trace()
你将进入debugging模式。 您可以使用's'来执行,'n'跟随下一行,类似于您使用'gdb'debugging器执行的操作。
通过使用Python交互式debugging器'pdb'
第一步是让Python解释器进入debugging模式。
A.从命令行
从命令行运行python解释器的最直接的方法
$ python -m pdb scriptName.py > .../pdb_script.py(7)<module>() -> """ (Pdb)
B.在口译员内
开发模块的早期版本,并更迭迭地进行实验。
$ python Python 2.7 (r27:82508, Jul 3 2010, 21:12:11) [GCC 4.0.1 (Apple Inc. build 5493)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import pdb_script >>> import pdb >>> pdb.run('pdb_script.MyObj(5).go()') > <string>(1)<module>() (Pdb)
C.从您的程序中
对于一个大项目和长时间运行的模块,可以使用import pdb和set_trace()来启动程序内部的debugging:
#!/usr/bin/env python # encoding: utf-8 # import pdb class MyObj(object): count = 5 def __init__(self): self.count= 9 def go(self): for i in range(self.count): pdb.set_trace() print i return if __name__ == '__main__': MyObj(5).go()
逐步debugging进入更多的内部
-
用“n”执行下一个语句(下一个)
-
重复上一个debugging命令…用ENTER键
-
退出所有…用“q” (退出)
-
用“p”打印variables值(打印)
a) pa
-
closures(Pdb)提示…用“c” (继续)
-
看到你在哪里…用“l” (列表)
-
步入子程序…用“s” (步入)
-
继续…但是直到当前子程序结束…用“r” (返回)
-
分配一个新的值
a) !b =“B”
-
设置一个断点
a) 打破床单编号
b) 打破function名称
c) 中断文件名:linenumber
-
临时断点
a) tbreak linenumber
-
条件断点
一) 打破linenumber,条件
注意:**所有这些命令都应该从** pdb执行
有关详细的知识,请参阅: –
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
如果你来自Java / C#背景,我想你最好的select是使用Eclipse与Pydev 。 这为您提供了一个内置debugging器的function齐全的IDE。我也使用它与django。
如果你想要一个集成了debugging器的IDE,可以试试PyScripter 。
通过Python代码以编程方式进行步进和追踪也是可能的(也很简单!)。 查看sys.settrace()文档了解更多细节。 另外这里是一个教程,让你开始。
Visual Studio与PTVS可能是您的select: http : //www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
https://wiki.python.org/moin/PythonDebuggingTools
pudb是一个很好的替代pdb的替代品
你可以看看pythondebugging器 ,它只是通过一个GUI来完成你正在寻找的东西