pdb && cProfile


pdb

https://docs.python.org/zh-cn/3.7/library/pdb.html#module-pdb

使用方式

  • 1、在命令行下直接运行调试
python -m pdb test.py

  • 2、在需要被调试的代码中添加import pdbpdb.set_trace()再运行代码进行调试
# test.py
def func():
    print('enter func()')

a = 1
b = 2
import pdb
pdb.set_trace() # 运行到此处启动pdb
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

# test.py
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)
python -m cProfile test.py

  • ncalls:相应代码/函数被调用的次数
  • tottime:相应代码/函数执行所需时间(不包括它调用的其他代码/函数的时间)
  • tottime percall:tottime/ncalls的结果
  • cumtime:对应代码/函数执行所需时间,包含它调用的其他代码/函数的时间
  • cumtime percall:cumtime和ncall相除的平均结果


文章作者: ShanSan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ShanSan !
 上一篇
几个不错的Jupyter Notebook云端展示平台 几个不错的Jupyter Notebook云端展示平台
jupyter nbviewerURL:https://nbviewer.jupyter.org/ 结合Github的示例用法:https://nbviewer.jupyter.org/github/ + <用户名或者用户名/存放i
2019-08-07
下一篇 
Python-自定义上下文管理器 Python-自定义上下文管理器
上下文管理器 上下文管理器可以帮助我们自动分配和释放资源 上下文管理器需要配合with语句使用 比如进行文件操作的时候我们可能会忘记操作后关闭文件(file close),使用with open(filename, mode) as f不
2019-07-26
  目录