pdb
https://docs.python.org/zh-cn/3.7/library/pdb.html#module-pdb
使用方式
- 2、在需要被调试的代码中添加
import pdb
、pdb.set_trace()
再运行代码进行调试
1 2 3 4 5 6 7 8 9 10 11
| def func(): print('enter func()')
a = 1 b = 2 import pdb pdb.set_trace() func() c = 3 print(a + b + c)
|
常用命令
简写 |
说明 |
p <变量名> |
输出变量的值 |
l |
列出源码,当前位置前后11行 |
n |
执行吓一条语句 |
s |
执行下一条语句,如果是函数,则会进入函数内,显示–call–,执行函数内第一条语句,执行完函数内语句后跳出显示–return– |
b |
列出当前所有断点 |
b lineno |
在某行添加断点 |
cl |
清除断点 |
q |
退出调试pdb |
help |
帮助 |
cProfile-性能分析
https://docs.python.org/zh-cn/3.7/library/profile.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| def memoize(f): memo = {} def helper(x): if x not in memo: memo[x] = f(x) return memo[x] return helper
@memoize def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2)
def fib_seq(n): res = [] if n > 0: res.extend(fib_seq(n-1)) res.append(fib(n)) return res
fib_seq(30)
|
1
| python -m cProfile test.py
|
- ncalls:相应代码/函数被调用的次数
- tottime:相应代码/函数执行所需时间(不包括它调用的其他代码/函数的时间)
- tottime percall:tottime/ncalls的结果
- cumtime:对应代码/函数执行所需时间,包含它调用的其他代码/函数的时间
- cumtime percall:cumtime和ncall相除的平均结果