参与拿奖:本文已参与「新人创作礼」活动,一起开启掘金创作之路
1.使用IDLE调试程序
1.1 使用Python标准开发环境IDLE的调式器Debugger
1.2 步骤如下:
运行IDLE进入主界面;
如下图找到Debugger点击运行即可:
调试方法:打开IDLE然后打开Debug下的Debugger即可,然后在IDLE窗口运行需要调试的程序(如下图所示);
2.使用pdb调试程序
2.1 交互模式下调试
使用pdb提供的功能可以直接调试语句块、表达式、函数等多种脚本:
#调试案例
import pdb
def f1():
x=5
print(x)
pdb.runcall(f1)
>>> pdb.runcall(f1)
> <pyshell#16>(2)f1()
(Pdb) 3
3
(Pdb) p x
*** NameError: name 'x' is not defined
(Pdb) 5
5
(Pdb) n
25
--Return--
> <pyshell#16>(2)f1()->None
(Pdb) 1
1
(Pdb) 5
5
(Pdb) return
2.2 在程序中插入断点
导入pdb模块,然后通过set_trace()函数在需要的位置设置断点。如果程序通过这种方法显示插入断点,那么命令提示符环境下执行该程序或双击程序时将自动打开pdb调试环境:
import pdb
n=5
pdb.set_trace()
for i in range(2,n):
if n%i==0:
print('No')
break
else:
print('Yes')
(Pdb) p i
3
(Pdb) l
119 #导入pdb模块,然后通过set_trace()函数在需要的位置设置断点,
120 # 如果程序通过这种方法显示插入断点,那么命令提示符环境下执行该程序或双击程序时将自动打开pdb调试环境
121 import pdb
122 n=5
123 pdb.set_trace()
124 -> for i in range(2,n):
125 if n%i==0:
126 print('No')
127 break
128 else:
129 print('Yes')
(Pdb)
2.3把pdb作为模块来调试程序
在命令行提示符执行"pdb -m pdb 脚本文件名",则直接进入调试程序,当调试结束或程序正常结束后,pdb重启该程序;把上述程序中的pdb模块的导入和断点插入函数都删除,然后在命令提示符环境中使用调试模式运行:
>>> python -m pdb 1.py
3.常用pdb调试命令:
①显示当前函数参数:
a(rgs)
②设置断点,和列出所有断点:b(reak)[[filename:]lineno]|function[,condition]
b 12 #在12行设置断点
b function #在function函数第一条执行语句设置断点
b #不带参数则列出所有断点,包括每个断点的触发次数、当前忽略计数以及与之关联的条件
b 17,condition #设置条件断点,仅当condition值为True时该断点有效
③删除缎断点:cl(ear)[filename:lineno|bpnumber[bpnumber...]]
cl #清除所有断点
cl filename:lineno #清除指定文件指定行的所有断点
cl 3 5 9 #清除第3,5,9个断点
④设置条件断点:condition bpnumber[condition]
condition 3 a<b #仅当a<b时,3号断点有效
condition 3 #将3号断点设置为无条件断点
⑤继续运行至下一断点或脚本或结束:continue ⑥禁用断点:disable[bpnumber[bpnumber]...]
disable 3 5 #禁用第3,5个断点,禁用后断点任然存在,可以再次被启用
⑦列出脚本清单:l(ist)[first[,last]]
l #列出脚本清单,默认11行
l m,n #列出第m行到n行的脚本代码
l m #列出从第m行开始的11行的代码
⑧关于栈帧: 在跟踪器中向下移动一个栈帧
d(own)
查看当前栈帧
w(here)
在栈跟踪器中向下移动一个栈帧
u(p)
⑨执行语句: 执行下一条语句,遇到函数时不进入其内部:n(ext) 执行下一条语句,遇到函数进入其内部:step
⑩临时断点:设置临时断点,该类型断点只会出现一次,执行后就会自动删除:tbreak
其他: 启用第n个断点:enable[bpnyumber[bpnumber...]]
enable n
查看pdb帮助
h(elp)[command]
为断点设置忽略计数,count默认值为0。如果某断点的忽略计数不为0,则触发时自动减1,当忽略计数为0时该断点处于活动状态:ignore bpnumber[count]
跳行执行:j(ump)
j 20 #跳到第20行执行
打印:p(rint)
p i #打印变量i的值
退出pdb调试:q(uit)
一直执行到当前函数返回:f(turn)
在pdb中执行语句,!与要执行的语句之间不需要空格,任何非pdb命令都被解释为Python语句并执行,甚至可以调用函数或修改当前上下文中华变量的值:[!]statement
默认执行上一条命令:直接回车
学习笔记
1.关于调试的方法有IDLE和pdb两种方式;
2.使用pdb有三种方式,分别为:a.在交互模式下使用;b.在程序执行中使用;c.使用"python -m pdb 脚本文件名"来进入调试模式;