【问题标题】:Profiling C code on Windows when using Eclipse使用 Eclipse 时在 Windows 上分析 C 代码
【发布时间】:2011-01-19 03:12:55
【问题描述】:

我知道我可以在 Linux 上使用 gprofkprof 分析我的代码。在 Windows 上是否有与这些应用程序类似的替代方案?

【问题讨论】:

  • 您在 Windows 上使用哪个编译器?
  • 你可以在windows上使用gprof和GCC编译器的MinGW端口。

标签: c windows eclipse profiling gprof


【解决方案1】:

商业软件:

  • Rational Quantify(昂贵、缓慢,但非常详细)
  • AQTime(更便宜,更慢,有点详细)

免费软件:

这些商业替代方案通过“插入”(添加指令)来更改已编译的代码,并使用添加的指令执行计时。这意味着它们会导致您的应用程序严重变慢。

这些免费的替代品使用采样,这意味着它们不太详细,但速度非常快。在实践中,我发现特别是“非常困”非常适合快速查看应用程序中的性能问题。

【讨论】:

  • 我尝试了非常困倦和卢克 StackWalker,但他们无法告诉我任何事情。他们似乎无法访问我的源代码。但是 gprof 工作得很好。怎么会?我真的很喜欢基于 GUI 的分析器,但它们不起作用。
  • 这个错误是由 Luke StackWalker 产生的:ERROR: SymGetModuleInfo64, GetLastError: 1114 (Address: 7C90E514)
  • 我在这里针对这个问题提出了一个单独的问题:stackoverflow.com/questions/2302596/…
【解决方案2】:

有一个 gprof 的 MinGW 端口,其工作方式与 Linux 变体几乎相同。您可以获取完整的 MinGW installation(我认为 gprof 已包含但不确定)或从 MinGW binutils package 获取 gprof。

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

【讨论】:

    【解决方案3】:

    是的,您可以分析代码with Visual Studio

    【讨论】:

    • 我是 Eclipse 用户,所以我没有选择。
    • @Pieter:那么请在问题中说明这一重要条款
    • 无论如何,Visual Studio 标准版和速成版都不包含分析器。使用 pro,有一个简单的(命令行)分析器,我相信它是一个单独的下载,并且不容易使用。微软想要的是(富人)购买 Team Suite。
    【解决方案4】:

    分析的原因是什么?您想 a) 测量时间并获得调用图,还是 b) 找到要更改的内容以使代码更快? (这些不一样。)

    如果 (b) 您可以使用 this trick,请使用 Eclipse 中的“暂停”按钮。


    补充:也许它有助于传达一些关于性能问题的实际情况以及您可以在哪里找到它们的经验。下面是一些简单的例子:

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

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

    因此通常会考虑“热点”和“瓶颈”,但大多数程序,尤其是较大的程序,往往会出现性能问题,即函数调用请求的工作实际上并不需要完毕。幸运的是,它们在所花费的时间内显示在调用堆栈上。

    【讨论】:

    • 我对分析感兴趣,以了解我的代码的哪些部分需要更长时间才能执行,以便发现最终的低效率。
    • @Pieter:发现效率低下是(b)。我正在努力宣传这件事。这是另一种看法:stackoverflow.com/questions/2308026/…
    • 对于像我这样的 C 新手来说听起来很复杂。我理想的分析应用程序应该能够在我的代码上放置热图,以查看哪些命令执行时间最长。我知道,有些代码应该需要更多的处理时间,但在很多情况下,这将有助于检测上述低效率。
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多