首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >推荐的开放源码分析器

推荐的开放源码分析器
EN

Stack Overflow用户
提问于 2009-05-13 21:49:31
回答 6查看 9.8K关注 0票数 14

我正在努力寻找开源分析器,而不是使用我不得不向$$$付费的商业分析器之一。当我在SourceForge上进行搜索时,我遇到了这四个我认为很有希望的C++分析器:

  1. 闪亮: C++ Profiler
  2. 低脂肪剖面仪
  3. 卢克·斯塔克沃克
  4. FreeProfiler

我不确定在学习我的程序的性能方面,哪一个分析器是最好的。很高兴听到一些建议。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-13 21:53:20

你可以试试Windows性能工具包。完全免费使用。这个博客条目有一个如何进行基于样本的分析的例子。

票数 6
EN

Stack Overflow用户

发布于 2009-05-13 23:48:55

票数 5
EN

Stack Overflow用户

发布于 2009-05-15 19:42:49

有不止一种方法可以做到。

别忘了无轮廓器的方法。

大多数分析器假设您需要1)高的定时统计精度(大量样本),2)低精度的问题识别(函数&调用图)。

这些优先事项可以逆转。也就是说,问题可以定位到精确的机器地址,而成本精度则是样本数量的函数。

大多数实际问题的成本至少为10%,而高精度并不是必需的。

例句:如果有什么东西使你的程序花费了2倍的时间,那就意味着其中有一些代码花费了50%。如果您在调用堆栈缓慢的时候采集了10个样本,其中大约5个将显示精确的代码行。程序越大,问题就越有可能是一个函数调用。

这是反直觉的,我知道。

注意: xPerf就快到了,但还不完全(据我所知)。它获取调用堆栈的样本并保存它们--这很好。我认为它需要的是:

  • 它应该只在你想要的时候才取样本。事实上,你必须过滤掉不相关的那些。
  • 在堆栈视图中,它应该显示发生调用的特定行或地址,而不仅仅是整个函数。(也许它能做到这一点,我从博客上看不出来。)
  • 如果单击获得蝶形视图(以单个调用指令为中心)或叶指令,则不应显示CPU部分,而应显示包含该指令的堆栈示例的部分。这将是作为一小部分时间的指令成本的直接衡量。(也许它能做到,我看不出来。)因此,例如,即使指令是对文件打开的调用或其他闲置线程的调用,它仍然会花费挂钟时间,您需要知道这一点。

注意:我刚刚看了卢克·斯塔克沃克,同样的话也适用。我认为这是正确的轨道,但需要用户界面工作。

补充说:仔细查看了LukeStackwalker之后,我担心它会成为度量函数比定位语句更重要这一假设的牺牲品。因此,在每个调用堆栈的样本上,它更新函数级的计时信息,但是它对行号信息所做的只是跟踪每个函数中的最小行号和最大行号,这,它所取的样本越多,它们之间的距离就越远。所以它基本上抛弃了最重要的信息--行号信息。重要的原因是,如果您决定优化一个函数,您需要知道其中哪些行需要工作,并且这些行在堆栈示例中(在被丢弃之前)。

有人可能会反对,如果保留行号信息,就会很快耗尽存储空间。两个答案。( 1)在样品上出现的线条只有那么多,而且反复出现。2)不需要那么多的样本--高统计精度测量的假设总是被假设的,但从来没有被证明是正确的。

我怀疑像xPerf这样的其他堆栈采样器也有类似的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/860602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档