Windows 上最好的免费 C++ 分析器是啥? [关闭]
Posted
技术标签:
【中文标题】Windows 上最好的免费 C++ 分析器是啥? [关闭]【英文标题】:What's the best free C++ profiler for Windows? [closed]Windows 上最好的免费 C++ 分析器是什么? [关闭] 【发布时间】:2010-09-09 05:08:53 【问题描述】:我正在寻找一个探查器以找到我的 C++ 代码中的瓶颈。我想找到一个免费的、非侵入性的、好的分析工具。我是一名游戏开发人员,我在 Xbox 360 上使用 PIX,发现它非常好,但它不是免费的。我知道 Intel VTune,但它也不是免费的。
【问题讨论】:
VTune 现在似乎是免费的:software.intel.com/en-us/vtune。我下载了社区版,它在分析 C++ 和托管 C# 代码方面做得很好 这怎么跑题了?据我所知,开发工具是主题。但它是基于意见的。 【参考方案1】:我使用 AQTime,它是我用过的最好的分析工具之一。 它不是免费的,但您可以获得 30 天的试用期,因此如果您计划只优化和分析一个项目并且 30 天对您来说就足够了,那么我建议您使用此应用程序。 (http://www.automatedqa.com/downloads/aqtime/index.asp)
【讨论】:
只有这个工具可以帮助我在 IIS 上分析以发布模式编译的混合(托管和本机)Web 应用程序。 很遗憾,他们不支持尝试评估其产品的人。 目前他们提供 14 天的试用期,但功能有限。【参考方案2】:另一个分析器是Shiny。
【讨论】:
找不到可下载的二进制文件,只有源代码。不是很方便。【参考方案3】:CodeXL 现在已取代 End Of Line'd AMD Code Analyst,两者都是免费的,但不如 VTune 先进。
还有Sleepy,很简单,但在很多情况下都能胜任。
注意:上述所有三个工具几年来都没有维护过。
【讨论】:
这里是 CodeAnalyst 的链接:developer.amd.com/CPU/CODEANALYST/Pages/default.aspx 我现在尝试使用它,但根本不喜欢它。我什至无法理解如何获得 TrueTime 10 年前可以做得很好的函数总时间百分比(包括被调用者)。 我写了一个 sleepy 的改编版,它不依赖于 wxWidgets,而是在命令行中运行。您针对正在运行的进程运行它一段时间,然后当您停止它时,您会获得该进程花费时间在做什么的统计信息。它是非信任的,因为您不必以任何方式修改代码即可使用它,但它会在读取调用堆栈时暂停您的线程。您还需要可用的 pdb 文件,以便获得有意义的输出,但我想这适用于任何分析器。 我建议尝试 xperf,我发现它优于 AMD 代码分析师。 CodeAnalyst 不会再收到任何更新,除了关键错误修复。他们切换到 CodeXL。 Here's the link 所以你可以更新你的答案。顺便说一句,感谢您让我了解 CodeAnalyst/XL。【参考方案4】:Very Sleepy 是适用于 Windows 系统的 C/C++ CPU 分析器(免费)。
【讨论】:
如果您使用 gcc 堆栈中的 Windows 二进制文件,这是一个不错的选择 - AMD CodeAnalyst 在 Windows 上无法识别 gcc 符号,但非常困! 注意,Very Sleepy 的最新版本是 2014 年的。 Very Sleepy v0.91 现已推出:github.com/VerySleepy/verysleepy/releases/tag/v0.91【参考方案5】:微软有Windows Performance Toolkit。
确实需要 Windows Vista、Windows Server 2008 或 Windows 7。
【讨论】:
怎么不免费?它是 Windows SDK 的一部分。我能够毫无问题地下载它。 (诚然,我们订阅了 MSDN,所以有些人的体验可能与我不同。) 免费与否,链接不再正常工作。【参考方案6】:有一个用于 MS VC 7.1 及更高版本的检测(功能精确)分析器,称为 MicroProfiler。 You can get it here (x64) 或 here (x86)。它不需要对您的代码进行任何修改或添加,并且能够实时显示调用者和被调用者的函数统计信息,而无需关闭应用程序/停止分析过程。
它与 VisualStudio 集成,因此您可以轻松启用/禁用项目的分析。也可以将它安装在干净的机器上,它只需要将符号信息与正在分析的可执行文件一起定位。
当来自非常昏昏欲睡之类的采样分析器的统计近似值不够时,此工具很有用。
粗略的比较表明,它优于 AQTime(当它在检测、函数级运行中调用时)。以下程序(完全优化,内联禁用)使用微分析器实时显示结果比仅收集统计数据的 AQTime 运行速度***倍:
void f()
srand(time(0));
vector<double> v(300000);
generate_n(v.begin(), v.size(), &random);
sort(v.begin(), v.end());
sort(v.rbegin(), v.rend());
sort(v.begin(), v.end());
sort(v.rbegin(), v.rend());
【讨论】:
它易于使用且超快速的分析器。只有一个我没有解决的问题是在我完成调试后,分析器窗口没有自动关闭,您必须通过任务管理器将其杀死(否则您无法重新编译您的项目)。 我发现通过常规CLOSE按钮关闭我的应用程序后,分析器窗口也可以定期关闭。但是当我通过 SHIFT+F5 快捷键(停止调试 VS 命令)退出应用程序时,分析器窗口关闭按钮被禁用。 不适用于 VS 2015。 从 1.1.590 开始修复。查看 Visual Studio 库页面上的更新 (visualstudiogallery.msdn.microsoft.com/…) 这真是太好了!应该排名更高!安装和运行超级简单,并为您提供您需要了解的大部分内容。我的第二个选择是 Windows Performance Analyzer:geekswithblogs.net/akraus1/archive/2015/04/21/163342.aspx【参考方案7】:我强烈推荐 Windows Performance Toolkit (WPT) 或 XPERF
命令行 xperf 命令行工具记录可使用 GUI xperfview 工具分析的 Windows 事件跟踪 (ETW) 日志。
使用stacktrace command line arguement 已被证明是我公司的宝贵工具,因为它可以分析和解决瓶颈问题。最引人注目的事情之一是 WPT 可以安装在任何环境中,甚至可以安装在古老的 Windows XP 上。
在 Windows 8 上,Windows 性能分析器将 xperf 提升到一个更高的水平。
除了 Visual Studio Profiler (2010/2012) 之外,ETW 日志中提供的硬数字和统计数据也非常详细,但它不是免费的 AFAIK。
如果您从未使用过 xperf...您不知道自己错过了什么
【讨论】:
好吧,我知道我缺少该网站的有效 URL。 我刚刚尝试过,但它从来没有为我的应用程序加载 .pdb(在将构建文件夹添加到符号路径之后),所以如果你真的想分析 C++ 代码,它有点没用。如果您想了解系统正在做的所有其他事情,它会很有用 - 它提供了一个惊人的全局。但对于 C++ 分析,它什么也没做。【参考方案8】:我使用了Luke Stackwalker,它为我的 Visual Studio 项目完成了这项工作。
其他有趣的项目有:
Proffy Dyninst【讨论】:
【参考方案9】:您可以使用 EmbeddedProfiler,它对 Linux 和 Windwos 都是免费的。
分析器是侵入式的(按功能),但它不需要任何代码修改。只需添加一个特定的编译器标志(-finstrument-functios 用于 gcc/MinGW 或 /GH 用于 MSVC)并链接分析器的库。它可以为您提供完整的调用树或只是一个功能列表。它有自己的分析器 GUI。
【讨论】:
【参考方案10】:请尝试我的分析器,称为 cRunWatch。它只有两个文件,因此很容易与您的项目集成,并且只需要添加一行来检测一段代码。
http://ravenspoint.wordpress.com/2010/06/16/timing/
需要 Boost 库。
【讨论】:
【参考方案11】:Proffy 很酷:http://pauldoo.com/proffy/
免责声明:这是我写的。
【讨论】:
#shamelessSelfPromotion :) 眨眼眨眼*【参考方案12】:我使用的是独立的 Visual Studio Profiler VSPerfMon。我编写了一个 GUI 工具来帮助我运行它并查看结果。
http://code.google.com/p/vsptree/
【讨论】:
【参考方案13】:多年来,我一直在使用“TrueTime - Compuware DevPartner 套件的一部分。有一个 [免费版](您可以试用 Compuware DevPartner 性能分析社区版。)。
【讨论】:
以上是关于Windows 上最好的免费 C++ 分析器是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章