你如何描述你的代码?

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

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

  • 一个function所花费的时间
  • 峰值内存使用量
  • 代码覆盖率

目前,我们手动执行[使用带有时间戳的日志语句和另一个脚本来解析日志并输出到excel。 呼…)

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

编辑:对不起,我没有首先指定环境, 它在专有移动平台上的普通C

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

对于性能分析,我更喜欢MacOSX上的Shark。 它是免费的Apple,非常好。 如果您的应用程序是vanilla 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或video一样在定时器上运行并且必须快速。 假设你在每个计时器刻度上运行的是子程序A.写一些测试代码以在一个简单的循环中运行子程序A,比如说1000次,或者足够长以使你等待至少几秒钟。

在它运行时,用一个暂停键随机停止它并对调用堆栈(不仅仅是程序计数器)进行采样并记录它。 (这是手动部分。)这样做了很多次,比如10次。一次是不够的。

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

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

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

这样做,直到你找不到更多优化,你将达到或接近你的最高速度。

对于复杂的应用程序,我是英特尔Vtune的忠实粉丝 。 对传统的探测器来说,这是一种略微不同的思维方式。 它的工作原理是对处理器进行采样,以查看指令指针每秒1,000次的位置。 它具有不需要对二进制文件进行任何更改的巨大优势,这通常不会改变您尝试测量的时间。

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

它还允许您测量各种其他以处理器/硬件为中心的指标,例如每个指令的时钟,缓存命中/未命中,TLB命中/未命中等,这些可以让您确定为什么某些代码段可能需要更长时间才能运行期待只是通过检查代码。

如果你正在进行’on the metal’嵌入式’C’系统(我不太确定你的post中隐含的’移动’),那么你通常会有一些定时器ISR,其中它很容易取样中断发生的代码地址(通过挖回堆栈或查看链接寄存器或其他)。 然后,在粒度/感兴趣范围的某种组合下构建地址直方图是微不足道的。

通常,编制一些代码/脚本/ Excel工作表的组合通常不会太难,这些组合将您的直方图计数与链接器符号/列表文件中的地址合并,以便为您提供配置文件信息。

如果你的内存非常有限,收集足够的数据可能会有点麻烦,既简单又有用,但你需要告诉我们更多关于你的平台的信息。

nProf – 免费,适用于.NET。

完成工作,至少足以看到80/20。 (20%的代码,占80%的时间)

Windows(.NET和Native Exes): AQTime是一个很好的工具。 独立或作为Visual Studio插件。

Java:我是JProfiler的粉丝。 同样,可以独立运行或作为Eclipse(或各种其他IDE)插件运行。

我相信两者都有试用版。

Google Perftools在这方面非常有用。

我使用devpartner与MSVC 6和XP

如果您的平台是专有操作系统,那么任何工具如何运作? 我觉得你现在正在做的最好