我常用的Python调试工具(二)

这是对 上一篇关于调试器的文章的一个小小的补充。

标准库有三种分析方法( cProfile和profile, hotshot)以及不计其数的第三方可视化工具,转化器,以及诸如此类的东西。

工具多了,不靠谱的建议自然少不了。

 

如果你不知道该用什么,那就用一个可视化的工具吧!

有很多的建议供你选择自己要用的可视化工具,但无论是使用如标准库的Stats模块这种文本形式的还是像 pycallgraph或者 gprof2dot这样的图形化的库,第一反应都是要写代码来生成报表。

但是这个主意很糟糕,你需要不断修改代码来改变或者探索报表的内容。如果你不是在寻找一块特定的代码块,那么一切会变得混乱不堪。你很可能会错过那些真正扼杀你程序性能的事情。

 

RunSnakeRun

你可以用pip install RunSnakeRun 或者 apt-get install runsnakerun来安装或者从 源码安装。

RunSnakeRun 是一个全面的工具,很容易集成 – 你可以和cProfile/profile来配合使用,只需要给profile.run方法指定一个filename的参数即可,比如:

import cProfile
cProfile.run("main()", filename="my.profile")

然后,在终端里运行:

runsnake my.profile

结果看起来就像这样:

我常用的Python调试工具(二)_第1张图片

这是可接受的,如果你的分析文件不是特别大的话,它会工作的很好。比如:你只有一个占用了太多运行时间的函数。

RunSnakeRun有一个内存调试模式(需要 Meliae)。遗憾的是我还没有试过。但是如果你想看到内存的使用情况,它看起来确实很有用。就像 这样。

 

KCachegrind

你可以用apt-get install kcachegrind 来安装或者从 源码安装。

鲜为人知的秘密:有windows版本的KCachegrind二进制包。 只需要安装 windows版本的KDE,然后在选项“开发者工具”选中它,很可能要取消选择其他项)。

我真的很喜欢这工具!它可以向你展示调用树的图表,可排序的调用表,调用/被调用的地图,源代码,而且你还能选择过滤掉所有的东西。而且它是语言无关的 – 如果你有C/C++背景的话,你很可能听说过这个工具。

我喜欢这个工具的程度超过RunSnakeRun,因为它比后者功能要强大的多:

  • 在调用数的图表上,你可以排序,改变布局/用很多方法来渲染或者导出成点图/png,RunSnakeRun甚至不能显示调用树的图表
  • 你可以看见源码
  • 你可以得到被调用地图
  • 更容易安装(不需要依赖wxPython)

在大项目里面哪些需要关注并不是那么显而易见,或者有很多的相关函数时,KCachegrind比RunSnakeRun更值得一用。

可生成KCachegrind 分析文件的工具

我想这是唯一的缺点,你需要用这种特殊的格式导出。但是它也有很好的支持:

  • pyprof2calltree
  • django扩展的 runprofileserver
  • 装饰器
  • kcachegrind 转换器
  • repoze.profile – 只需要设置cachegrind_filename

我使用的是函数装饰器,无非在你的/tmp目录下多了些导出的分析文件。

附上截图:

我常用的Python调试工具(二)_第2张图片

还有值得一提的工具?请评论留言!

相关文章

  • 我常用的 Python 调试工具
  • Python关键字yield详解
  • 开源设计工具:最低成本做出最佳方案
  • Python程序的性能分析指南
  • 调试器工作原理之二——实现断点
  • Python编程中需要注意的一些事
  • 如何使用Python编写一个Lisp解释器
  • 用Python写一个FUSE(用户态文件系统)文件系统
  • Python中的生产者消费者问题
  • Java程序员应该知道的10个调试技巧

我常用的Python调试工具(二),首发于 博客 - 伯乐在线。

你可能感兴趣的:(python,工具,调试,IT技术)