使用Eclipse时在Windows上分析C代码

我知道我可以在Linux上用gprofkprof来分析我的代码。 在Windows上有这些应用程序可供select吗?

商业软件:

  • 理性量化(昂贵,缓慢,但非常详细)
  • AQTime(较便宜,较慢,稍详细一点)

免费软件:

这些商业的替代方案通过“测试”(添加指令)来改变编译后的代码,并根据添加的指令执行时序。 这意味着他们会导致您的应用程序严重放缓。

这些免费的替代品使用抽样,这意味着他们不太详细,但速度非常快。 在实践中,我发现尤其是Very Sleepy非常适合快速查看应用程序中的性能问题。

有一个gprof的MinGW端口,与Linux版本的工作方式大致相同。 你可以得到一个完整的MinGW安装 (我认为gprof是包括但不是确定的),或者从MinGW binutils包得到gprof。

对于Eclipse,有TPTP,但据我所知,它不支持分析C / C ++。

是的,你可以使用Visual Studio剖析代码

分析的原因是什么? 你想a)测量时间,并得到一个调用图,或b)找到改变的东西,使代码更快? (这些不一样。)

如果(b)你可以使用这个技巧 ,使用Eclipse中的暂停按钮。


补充说:也许这将有助于传达一些性能问题实际上是什么样的经验,以及在哪里可以找到它们。 这里有一些简单的例子:

  • 插入排序(order n ^ 2),其中被排序的项目是字符串,并通过字符串比较函数进行比较。 热点在哪里? 在字符串比较。 哪里有问题? 在调用字符串比较的排序中。 如果n = 10,这不是问题,但如果n = 1000,突然需要很长时间。 字符串比较被称为“冷”,但这是问题的地方。 调用堆栈的少量样本可以确定地确定它的位置。

  • 加载插件的应用程序需要很长时间才能启动。 分析人员说,基本上所有的东西都是“冷”的。 一些衡量I / O时间的东西说这几乎是所有的I / O时间,这看起来就像你所期望的那样,所以它可能看起来没有希望。 但是,为了将字符串常量翻译为本地语言,在读取插件dll的资源部分的过程中,堆栈样本显示大部分时间花费在堆栈的大约20层。 进一步调查,你会发现被翻译的大部分字符串并不是真正需要翻译的那种。 他们只是放在“万一”他们可能需要翻译,并没有被认为是可能导致性能问题的东西。 解决这个问题带来了大量的时间节省。

因此,通常以“热点”和“瓶颈”来考虑,但是大多数程序,特别是大型程序,往往会以功能调用的形式存在性能问题,而这些功能调用并不需要完成。 幸运的是,他们在消费时间内将自己展示在通话堆栈上。