31 | pdb & cProfile:调试和性能分析的法宝
景霄
该思维导图由 AI 生成,仅供参考
你好,我是景霄。
在实际生产环境中,对代码进行调试和性能分析,是一个永远都逃不开的话题。调试和性能分析的主要场景,通常有这么三个:
一是代码本身有问题,需要我们找到 root cause 并修复;
二是代码效率有问题,比如过度浪费资源,增加 latency,因此需要我们 debug;
三是在开发新的 feature 时,一般都需要测试。
在遇到这些场景时,究竟应该使用哪些工具,如何正确的使用这些工具,应该遵循什么样的步骤等等,就是这节课我们要讨论的话题。
用 pdb 进行代码调试
pdb 的必要性
首先,我们来看代码的调试。也许不少人会有疑问:代码调试?说白了不就是在程序中使用 print() 语句吗?
没错,在程序中相应的地方打印,的确是调试程序的一个常用手段,但这只适用于小型程序。因为你每次都得重新运行整个程序,或是一个完整的功能模块,才能看到打印出来的变量值。如果程序不大,每次运行都非常快,那么使用 print(),的确是很方便的。
但是,如果我们面对的是大型程序,运行一次的调试成本很高。特别是对于一些 tricky 的例子来说,它们通常需要反复运行调试、追溯上下文代码,才能找到错误根源。这种情况下,仅仅依赖打印的效率自然就很低了。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Python中的pdb和cProfile是开发中不可或缺的调试和性能分析工具。pdb提供了交互式的源代码调试功能,通过设置断点和执行打印、单步执行、列举源代码等操作,提高了调试效率。而cProfile则可以对代码的每个部分进行动态分析,计算每个模块的消耗时间,帮助定位程序的瓶颈并进行优化。文章还介绍了cProfile的基本用法,并强调了pdb和cProfile对开发者的重要性。读者可以通过它们的官方文档进行实践,熟能生巧。整体而言,本文深入浅出地介绍了Python中常用的调试工具pdb和性能分析工具cProfile,为读者提供了宝贵的技术知识。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》,新⼈⾸单¥59
《Python 核心技术与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(30)
- 最新
- 精选
- AllenGFLiu哥,不怀好意的问一下,你们在谷歌会用微软的vscode 吗?[奸笑脸] 每次看你都是提到pycharm ,我是从pycharm 转到vscode 上的,感觉整个世界都安静了。
作者回复: 哈哈,我是fb的,不用vscode的哈
2019-07-19514 - 小侠龙旋风我要把这个装饰器保存下来
作者回复: 哈哈好
2019-07-2134 - 321web 应用怎么调试?譬如flask或django框架开发的应用,该如何调试。
作者回复: 看你侧重点是什么?如果是性能,有类似cProfile的工具,如果只是简单的debug,可以通过设置breakpoint或者print
2019-07-1922 - xavier对应到C、C++就是gdb。现在被IDE给宠坏了,感觉还是Command Line纯粹。
作者回复: 这个具体看需求和个人习惯了,ide方便就ide来,但是有些项目只能用command line
2019-08-151 - return全文这个装饰器最牛逼。2019-07-19681
- ( ̄_ ̄ )和gdb的命令差不多2019-07-1910
- frozen您好,pdb调试多线程的时候目前还不支持吧2019-07-259
- 一只眼看世界dict1 = {} def fibl(n): if n == 0: return 0 if n == 1: return 1 return (fibl(n-1) if n-1 not in dict1 else dict1[n-1]) + (fibl(n-2) if n-2 not in dict1 else dict1[n-2]) def all_fib(n): global dict1 res =[] for i in range(n + 1): req = fibl(i) dict1[i] = req res.append(req) print(res) all_fib(100000) 老师用的装饰器很高大上(看了好几遍才搞明白), 但是当数字大于995后会有超过递归深度报错, 所以过来皮一下/狗头2019-08-1428
- JackLee还有一个ipdb是pdb的加强版,用法比较相近,不过需要pip安装一下2019-07-197
- new老师应该在这里回顾一下装饰器的用法2019-07-226
收起评论