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

421 查看

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

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

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

 

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

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

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

 

RunSnakeRun

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

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

然后,在终端里运行:

结果看起来就像这样:

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

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

 

KCachegrind

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

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

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

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

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

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

可生成KCachegrind 分析文件的工具

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

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

附上截图:

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