pdb调试
pdb调试有两种方式:
1.单步调试代码
- python -m pdb xxx.py 启动脚本,进入单步执行模式
h | help-显示所有可用的命令行 |
w | where-打印当前执行堆栈 |
d | down-执行跳转到当前堆栈的更深一层 |
u | up-执行跳转到当前堆栈的上一层 |
b | break-添加断点 |
b line-number | 在当前脚本的line-number行添加断点 |
b filename:line-number | 在脚本filename的第line-number行添加断点 |
b func | 在函数func的第一条可执行语句处添加断点 |
b | 列出当前所有的断点,以及断点执行的统计次数 |
tbreak | temporary break-临时断点,在第一次执行完这个断点之后,自动删除这个断点 |
cl | clear-清除所有断点,会询问,输入yes确认即可 |
cl bpnumber1 bpnumber2 | 清除编号为bpnumber1 bpnumber2的断点 |
cl line-number | 清除当前脚本第line-number行的断点 |
cl filename:line-number | 清除脚本filename中第line-number行的断点 |
disable bpnumber | 停用断点,参数为bpnumber,和cl的区别是,断点依然存在,只是不启用 |
enable bpnumber | 激活断点,参数为bpnumber |
s | step-单步执行,如果当前语句是函数调用,会进入函数内部,执行到函数的第一句 |
n | next-单步执行,如果当前语句是函数调用,不会进入函数内部,执行到当前语句的下一条语句 |
r | return-执行当前运行的函数直到结束 |
c | continue-继续执行,直到遇到下一条断点 |
l | list-当前执行语句周围11条代码 |
l first | 列出第first行周围11条代码 |
l first,second | 列出first行到second行的代码(注意有一个,) |
a | args-列出当前正在执行的函数的参数 |
p {expression} | print-打印输出expression的值 |
pp {expression} | print-打印输出expression的值,据说会好看一些 |
run | 重新启动debug,相当于restart |
q | quit-退出debug |
j line-number | jump-设置下条执行的语句函数,只能在堆栈的最底层跳转,向后重新执行,向前可直接执行到行号 |
unt | until-执行到下一行(跳出循环),或者当前堆栈结束 |
condition bpnumber conditon | 给断点设置条件,当参数condition返回True的时候bpnumber断点有效,否则bpnumber断点无效 |
-
临时断点与断点的区别:临时断点在第一次执行到这个断点之后,就自动删除这个断点,用法和break一样
-
bp:break point
-
bpnumber:断点编号
-
注意:
1:直接输入Enter,会执行上一条命令; 2:输入PDB不认识的命令,PDB会把他当做Python语句在当前环境下执行;
2.import pdb pdb.set_trace()
-
pdb单步执行太麻烦了,所以第二种方法是import pdb 之后,直接在代码里需要调试的地方放一个pdb.set_trace(),就可以设置一个断点, 程序会在pdb.set_trace()暂停并进入pdb调试环境,可以用pdb 变量名查看变量,或者c继续运行
-
在需要的地方添加:
**通用方法**:pdb.set_trace() **pyton3.6以上**:breakpoint()
ipdb调试
IPython调试
-
安装IPython
pip3 install ipython
-
使用IPython进行调试
引入 from IPython import embed 在需要进行交互式调试的地方 embed()