根据设计编写代码后需要对一些代码进行调试,可以通过log信息检查代码是否按照设计执行,有时发现代码工作异常但看log又不能提供更多信息时,就需要对代码进行调试以获得更详细的出错信息来帮助修正代码。
python提供了原生的pdb来对代码进行调试还是比较方便的,但像远程调试,多线程之类的pdb是搞不定的。
pdb调试方法有以下几种:
-
命令行启动目标,加上
-m
参数,这是我最常用的调试方式。python -m pdb test.py
执行后,断点会出现在程序的第一行
-
在python的交互环境启用
import pdb import mymodule pdb.run('mymodule.test()')
-
硬编码调试
import pdb for i in range(10): if i == 5: pdb.set_trace() print(i)
运行脚本,到pdb.set_trace()那会中断。
常用调试命令:
Key | Description |
---|---|
h(elp) | 打印当前pdb可用命令。可用h [command] 查询 |
l(ist) | 列出当前运行的代码块 |
b(reak) | b [n] 在第n行设置断点, b [func] 在某函数入口设置断点,只输入b 会列出所有断点 |
cl(ear) | cl [n] 清除第n行断点,cl [func], cl 同 b |
enbale | 激活断点 |
disable | 禁用断点 |
n(ext) | 单步出调试 Step out,相当于VS的F10 |
s(tep) | 单步进调试 Step into,相当于VS的F11 |
c(ont(inue)) | 继续执行,直至遇到断点,相当于VS F5 |
j(ump) | 跳转到某行 j [n] |
a(rgs) | 打印当前函数参数 |
p(arameter) | 打印变量 |
! | 感叹号后跟语句,可直接改变某个变量 |
q(uit) | 退出调试 |
condition | 条件断点 condition [n] 条件表达式 |
bt/w | 查看调用堆栈 |
r | 执行到函数返回 |
d | 移到当前堆栈帧的下一帧 |
u | 移到当前堆栈帧的上一帧 |
艾玛,熟悉了python的调试环境后发现python调试和C差不多吗。不错不错,^_^