你最喜欢的分析工具是什么(适用于C++)

Oys*_*erD 81 c++ performance profiling

到目前为止,我只使用过Rational Quantify.我听说过有关英特尔VTune的好消息,但从未尝试过!

编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好结果的唯一方法.


也可以看看:

Windows上的本机C++有哪些优秀的分析器?

Al.*_*Al. 35

对于Linux开发(尽管其中一些工具可能适用于其他平台).这是我所知道的两个大牌,还有很多其他较小的名字在一段时间内没有看到积极的发展.

  • Valgrind太棒了. (5认同)

Wei*_*nde 26

对于Linux: Google Perftools

  • 比valgrind更快(但不是那么精细)
  • 不需要代码检测
  • 漂亮的图形输出( - > kcachegrind)
  • 进行内存分析,cpu-profiling,泄漏检查


Mik*_*vey 8

恕我直言,使用调试器进行采样是最好的方法.您只需要一个IDE或调试器,它可以让您暂停程序.在您安装Profiler之前,它会解决您的性能问题.

  • 是! 这对我很有用.它不需要仪器.它不需要安装任何分析器等.在linux上,你可以使用gdb.程序全速运行.点击ctrl-c停止.输入'bt'来显示堆栈跟踪.然后'c'继续,然后再次ctrl-c.效果很好!在复杂的程序中,使用这种技术将执行时间缩短了20%.真棒! (2认同)

Mat*_*ard 7

我唯一的经验是使用AutomatedQA(现在的SmartBear软件)进行AQTime分析.它内置了几种类型的分析器(性能,内存,Windows句柄,异常跟踪,静态分析等),并使用代码来获取结果.

我很喜欢使用它 - 找到那些代码中的小变化可以显着提高性能的地方总是很有趣.


jsi*_*ght 5

我过去曾经广泛使用过Glowcode,除了积极的体验之外别无他法.它的Visual Studio集成非常好,它是我曾经使用过的最有效/直观的分析器(甚至与托管代码的分析器相比).

显然,如果你没有在Windows上运行,那就没用了,但是这个问题让我不清楚你的要求是什么.


Dar*_*ari 5

oprofile,毫无疑问;它简单,可靠,可以完成工作,并且可以提供各种很好的数据细分。


Dim*_* C. 5

Visual Studio 2008中的分析器非常好:快速,用户友好,清晰且集成在IDE中.

  • 不仅仅是Team版本中的探查器吗? (2认同)

Mob*_*erg 5

我以前从未做过剖析.昨天我编写了一个ProfilingTimer类,它带有一个静态时间表(map <std :: string,long long>)用于时间存储.

构造函数存储起始刻度,析构函数计算经过的时间并将其添加到地图中:

ProfilingTimer::ProfilingTimer(std::string name)
 : mLocalName(name)
{
 sNestedName += mLocalName;
 sNestedName += " > ";

 if(sTimetable.find(sNestedName) == sTimetable.end())
  sTimetable[sNestedName] = 0;

 mStartTick = Platform::GetTimerTicks();
}

ProfilingTimer::~ProfilingTimer()
{
 long long totalTicks = Platform::GetTimerTicks() - mStartTick;

 sTimetable[sNestedName] += totalTicks;

 sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}
Run Code Online (Sandbox Code Playgroud)

在我要配置的每个函数(或{block})中,我需要添加:

ProfilingTimer _ProfilingTimer("identifier");
Run Code Online (Sandbox Code Playgroud)

这条线在我想要描述的所有函数中添加有点麻烦,因为我必须猜测哪些函数需要花费很多时间.但它运作良好,打印功能以%表示消耗时间.

(是否有其他人使用任何类似的"自制分析"?或者它只是愚蠢?但它很有趣!有没有人有改进建议?

是否有某种自动添加线到所有功能?)


Lou*_*ndy 3

分析有不同的要求。检测的代码是否可以,或者您是否需要分析优化的代码(甚至已经编译的代码)?您需要逐行的个人资料信息吗?您正在运行哪个操作系统?您还需要分析共享库吗?跟踪系统调用怎么样?

就我个人而言,我所做的一切都使用 oprofile,但这可能不是所有情况下的最佳选择。Vtune 和 Shark 也都非常出色。