一、用print() | |
二、用断言(assert) | |
三、用logging |
|
四、pdb | |
五、pdb.set_trace() |
一、用print()
1.1 步骤:
1.1.1 保存文件为debugtest.py,注意中间加入了print()
1.1.2在命令提示符下运行,可以看到打印的变量值
1.2 缺点:需要返回进行删除print()
二、用断言(assert)
2.1 步骤
2.1.1 debugtest.py修改如下
2.1.2运行,显示断言失败,assert语句本身就会抛出AssertionError:
2.2 优势
与print相比,启动Python解释器时可以用 -O 参数(注意为大写O)来关闭assert:
三、logging
3.1 步骤
在debugtest.py开头添加:
import logging
logging.basicConfig(level=logging.INFO)
程序中段修改为:
logging.info('n = %d' % n)
全部修改完如下:
3.2运行
3.3 优势
3.3.1 logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。
3.3.2另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。
四、pdb
启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。
4.1 步骤
4.1.1修改debugtest.py如下
4.1.2 使用 -m pdb启动
4.1.3 以参数-m pdb启动后,输入命令l来查看全部代码:
4.1.4 输入命令n,进行单步执行
4.1.5 注:可以输入命令 p 变量名查看变量,但是这个变量所在的代码必须是运行过之后才能查看,否则,会出现找不到变量的情况,如下
下图清晰反映出了,要查看变量,前提是变量所在代码必须已经执行了
4.1.6 使用命令 q 结束调试,退出程序
4.2缺点
pdb在命令行调试的方法理论上是万能的,但实在是太麻烦了,如果有一千行代码,要运行到第999行很难敲了
五、pdb.set_trace()
也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点
5.1步骤
5.1.1 加上import pdb以及pdb.set_trace() ,修改debugtest.py如下,运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境
5.1.2 运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,,可以用命令p查看变量,或者用命令c继续运行:
5.2 总结
这个方式比直接启动pdb单步调试效率要高很多,但也高不到哪去。