你如何分析你的代码?

我希望不是每个人都使用Rational Purify。

那么当你想测量时你怎么做:

  • 一个函数所花费的时间
  • 峰值内存使用率
  • 代码覆盖率
  • 目前,我们手动执行[使用带时间戳记的日志语句和另一个脚本来解析日志和输出到excel。 呼...)

    你会推荐什么? 指点工具或任何技术,将不胜感激!

    编辑:对不起,我没有指定的第一个环境,它的纯C在专有的移动平台上


    您可能需要不同的工具来进行性能分析和代码覆盖。

    为了分析,我更喜欢MacOSX上的Shark。 它是免费的苹果,非常好。 如果你的应用程序是香草C,你应该可以使用它,如果你能掌握一台Mac。

    在Windows上进行分析可以使用LTProf。 便宜,但不是很好:http://successfulsoftware.net/2007/12/18/optimising-your-application/

    (我认为,微软公司通过不提供更便宜的Visual Studio版本的体面分析器来真正实现自己的脚步。)

    对于覆盖范围,我更喜欢Windows上的Coverage Validator:http://successfulsoftware.net/2008/03/10/coverage-validator/它实时更新覆盖范围。


    我做了很多。 如果你有IDE或者ICE,有一种技术需要一些手动的工作,但是工作不会失败。

    警告:现代程序员讨厌这个问题,我会陷入低谷。 他们喜欢他们的工具。 但它确实有效,而且你并不总是拥有漂亮的工具。

    我认为在你的情况下,代码是类似DSP或视频运行在计时器上,必须快速。 假设你在每个定时器tick上运行的是子程序A.在一个简单的循环中写一些测试代码来运行子程序A,例如1000次,或者足够长的时间让你等待至少几秒钟。

    当它运行时,用暂停键随机暂停它并采样调用堆栈(不仅仅是程序计数器)并记录它。 (这是手册的一部分。)做一些这样的次数,比如10.一次是不够的。

    现在查找堆栈样本之间的共同点。 查找至少2个样本上出现的任何指令或调用指令。 这些将会有很多,但其中一些将会用代码进行优化。

    这样做,你会得到一个很好的加速,保证。 1000次迭代将花费更少的时间。

    你不需要大量样品的原因是你不会寻找小的东西。 就像在10个样本中有5个样本看到特定的调用指令一样,它占总执行时间的大约50%。 如果你真的想知道,更多的样本会更精确地告诉你这个百分比是多少。 如果你像我一样,你想知道的就是它的位置,所以你可以修复它,然后继续下一个。

    做到这一点,直到你找不到更多的东西来优化,你将达到或接近你的最高速度。


    对于复杂的应用程序,我是英特尔Vtune的忠实粉丝。 这与传统的用于处理代码的分析器略有不同。 它通过对处理器进行采样来查看指令指针每秒1000次的位置。 它有一个巨大的优势,就是不需要对你的二进制文件进行任何修改,而这通常会改变你正在测试的时间。

    不幸的是,这对于.net或java来说并不好,因为Vtune没有办法像传统代码一样将指令指针映射到符号。

    它还允许您测量各种其他以处理器/硬件为中心的度量标准,如每条指令的时钟数,高速缓存命中/未命中数,TLB命中数/缺失数等等,这些可以让您确定某些代码段的运行时间可能会比您想要的要长期望通过检查代码。

    链接地址: http://www.djcxy.com/p/6889.html

    上一篇: How do you profile your code?

    下一篇: threaded C++ application on Linux?