1、 程序调试
如果是用pycharm调试程序,则可以借助IDE的debug功能进行单步跟踪,可以查看每一个变量的值,但如果是在linux平台上,就没那么容易了,通常,我会使用print输出关键变量的值,来了解程序的执行过程,这样做虽然可以,但存在缺陷,要写好多个print,而且程序调试好了以后,还得把这些print都去掉
最近了解到PySnooper,github上的热门项目,可以不使用print,却能将程序执行的每一个步骤都立体的呈现出来
2、 使用实例
安装方法如下
pip3 install pysnooper
使用示例
import pysnooper
@pysnooper.snoop(output='./log')
def pop_sort(lst):
length = len(lst)
for i in range(length-1):
for j in range(length-1-i):
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1],lst[j]
lst = [3, 2, 9, 5, 8, 1, 4, 0]
pop_sort(lst)
print(lst)
只需要使用这个库的snoop装饰器就可以了,output可以定义一个文件,程序执行过程中的信息都会保存到这个文件中,如果不设置output,这些信息会在终端输出
下面是log日志中的部分信息
Starting var:.. lst = [3, 2, 9, 5, 8, 1, ...]
17:24:13.864020 call 4 def pop_sort(lst):
17:24:13.864311 line 5 length = len(lst)
New var:....... length = 8
17:24:13.864647 line 6 for i in range(length-1):
New var:....... i = 0
17:24:13.865066 line 7 for j in range(length-1-i):
New var:....... j = 0
17:24:13.865442 line 8 if lst[j] > lst[j+1]:
17:24:13.865654 line 9 lst[j], lst[j+1] = lst[j+1],lst[j]
Modified var:.. lst = [2, 3, 9, 5, 8, 1, ...]
17:24:13.866004 line 7 for j in range(length-1-i):
Modified var:.. j = 1
17:24:13.866365 line 8 if lst[j] > lst[j+1]:
17:24:13.866579 line 7 for j in range(length-1-i):
Modified var:.. j = 2
17:24:13.866918 line 8 if lst[j] > lst[j+1]:
17:24:13.867110 line 9 lst[j], lst[j+1] = lst[j+1],lst[j]
Modified var:.. lst = [2, 3, 5, 9, 8, 1, ...]
17:24:13.867448 line 7 for j in range(length-1-i):
Modified var:.. j = 3
17:24:13.867731 line 8 if lst[j] > lst[j+1]:
17:24:13.867904 line 9 lst[j], lst[j+1] = lst[j+1],lst[j]
Modified var:.. lst = [2, 3, 5, 8, 9, 1, ...]
17:24:13.868181 line 7 for j in range(length-1-i):
Modified var:.. j = 4
17:24:13.868515 line 8 if lst[j] > lst[j+1]:
17:24:13.868704 line 9 lst[j], lst[j+1] = lst[j+1],lst[j]
Modified var:.. lst = [2, 3, 5, 8, 1, 9, ...]
17:24:13.869003 line 7 for j in range(length-1-i):
Modified var:.. j = 5
17:24:13.869290 line 8 if lst[j] > lst[j+1]:
17:24:13.869454 line 9 lst[j], lst[j+1] = lst[j+1],lst[j]
Modified var:.. lst = [2, 3, 5, 8, 1, 4, ...]
17:24:13.869755 line 7 for j in range(length-1-i):
Modified var:.. j = 6
17:24:13.870098 line 8 if lst[j] > lst[j+1]:
17:24:13.870268 line 9 lst[j], lst[j+1] = lst[j+1],lst[j]
17:24:13.870439 line 7 for j in range(length-1-i):
17:24:13.870607 line 6 for i in range(length-1):
列表的值并没有全部展示出来,这算是个小小的遗憾,因为有时候,还是需要将变量的全部信息输出的