代码之家  ›  专栏  ›  技术社区  ›  OysterD

您最喜欢的剖析工具(C++)是什么?

  •  78
  • OysterD  · 技术社区  · 16 年前

    编辑:我主要是寻找软件,将仪器的代码,因为我想这是唯一的办法,以获得非常好的结果。


    另见:

    What are some good profilers for native C++ on Windows?

    21 回复  |  直到 8 年前
        1
  •  35
  •   Al.    16 年前

    对于linux开发(尽管其中一些工具可能在其他平台上工作)。这是我认识的两个大牌,还有很多其他的小牌已经有一段时间没有看到积极的发展了。

        2
  •  26
  •   abcd Luidy    9 年前

    Google Perftools

    • 比valgrind还快(但粒度不那么细)
    • 不需要代码检测
    • 内存分析,cpu分析,泄漏检查
        3
  •  8
  •   Hugh Perkins    10 年前

    伊姆霍, sampling using a debugger 是最好的方法。您只需要一个IDE或调试器,让您停止程序。它甚至可以在安装profiler之前解决性能问题。

        4
  •  7
  •   Matt Dillard    14 年前

    AQTime 由AutomatedQA(现在是SmartBear软件)提供。它内置了几种类型的探查器(性能、内存、Windows句柄、异常跟踪、静态分析等),并插入代码以获得结果。

    我很喜欢使用它-找到那些代码中的小改动可以显著提高性能的地方总是很有趣的。

        5
  •  5
  •   jsight TaherT    16 年前

    Glowcode 在过去有过广泛的经历,但都是积极的。它的Visual Studio集成非常好,是我使用过的最高效/最直观的探查器(甚至与托管代码的探查器相比)。

    很明显,如果你不在Windows上运行,那是没用的,但是这个问题让我不清楚你的具体要求是什么。

        6
  •  5
  •   Dimitri C.    15 年前

    Visual Studio 2008 非常好:速度快,用户友好,清晰,集成在IDE中。

        7
  •  5
  •   Moberg    8 年前

    我以前从来没有做过侧写。昨天我用一个静态时间表(map<std::string,long long>)为时间存储编程了一个ProfilingTimer类。

    构造函数存储起始记号,析构函数计算经过的时间并将其添加到映射中:

    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);
    }
    

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

    ProfilingTimer _ProfilingTimer("identifier");
    

    这行代码添加到我要分析的所有函数中有点麻烦,因为我必须猜测哪些函数需要花费大量时间。但它工作得很好,打印功能显示的时间消耗百分比。

    是否有某种自动添加行到所有函数?)

        8
  •  4
  •   Dark Shikari    16 年前

    毫无疑问,oprofile是一款简单、可靠的软件,它能提供各种各样的数据。

        9
  •  4
  •   user15071    16 年前

    对于Windows,请签出 Xperf

    • 谁使用的CPU最多?使用调用堆栈深入到函数名。
    • 谁在做最多的注册表查询?
    • 磁盘写入?等。

    当你发现瓶颈时,你会很惊讶,因为它们可能不是你所期望的那样!

        10
  •  3
  •   Louis Brandy    16 年前

    分析有不同的要求。插入指令的代码是否正常,或者是否需要分析优化的代码(甚至是已编译的代码)?你需要逐行的个人资料吗?你在运行哪个操作系统?您还需要分析共享库吗?跟踪系统调用呢?

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

        11
  •  3
  •   rlerallut    16 年前

    既然你没有提到你正在开发的平台,我就说Linux下的cachegrind。一定地。它是Valgrind工具集的一部分。

    http://valgrind.org/info/tools.html

    里面

    请注意,有一个前端KCachegrind可用。

        12
  •  3
  •   Shog9    16 年前

    对于Windows开发,我一直在使用软件验证 Performance Validator -它速度快,准确度高,价格合理。最好的是,它可以检测一个正在运行的进程,并允许您在运行时打开和关闭数据收集,无论是手动的还是基于调用堆栈的-非常适合分析一个较大程序的一小部分。

        13
  •  3
  •   Qwertie    16 年前

    代码分析是错误的(经常崩溃),在我的代码,其结果往往是不准确的。它的用户界面不直观。例如,要到达配置文件结果中的调用堆栈显示,您必须单击“进程”选项卡,然后单击程序的EXE文件名,然后单击工具栏按钮,该按钮上有小字母“CSS”。但它是免费的,所以你不妨试试,它的工作(功能较少)没有AMD处理器。

    VTune($700)有一个 terrible user interface 在大型程序中,很难找到所需的特定调用树,而且一次只能查看程序中的一个“节点”(具有直接调用方和被调用方的函数),因此无法查看完整的调用树。有一个调用图视图,但是我找不到方法使相对执行时间显示在图上。换句话说,不管花了多少时间,图中的函数看起来都是一样的——这就好像它们完全忽略了分析的要点。

    VisualStudio的探查器具有三的最佳GUI,但由于某种原因,它无法从大多数代码中收集样本(样本只在我的整个C++程序中被收集了几个函数)。另外,我也找不到直接购买它的价格或方式;但它是随我公司的MSDN订阅而来的。Visual Studio支持托管、本机和混合代码;在这方面,我不确定其他两个探查器。

    总之,我还不知道有一个好的轮廓仪!我一定要看看这里的其他建议。

        14
  •  3
  •   EvilTeach    16 年前

    我用 devpartner 对于pc平台。

        15
  •  2
  •   eli    16 年前

    我尝试过量化一个AQTime,Quantify之所以获胜,是因为它具有无价的“关注子树”和“删除子树”功能。

        16
  •  2
  •   Fabien Hure    16 年前

    唯一敏感的答案是 PTU 来自英特尔。当然,最好在英特尔处理器上使用它,并且至少在C2D机器上获得更有价值的结果,因为体系结构本身更容易返回有意义的配置文件。

        17
  •  2
  •   Don Neufeld    16 年前

        18
  •  2
  •   Michael McCarty    16 年前

    电围栏在malloc调试中运行良好

        19
  •  1
  •   charfeddine.ahmed    15 年前

    我最喜欢的工具是Easy Profiler: http://code.google.com/p/easyprofiler/

        20
  •  1
  •   Coder    14 年前

    Windows下的Visual studio 2010探查器。VTune有一个很棒的调用图工具,但从WindowsVista/7开始就坏了。我不知道他们是否修好了。

        21
  •  0
  •   Brian Kennedy    13 年前

    拍照的能力是巨大的。我经常在等待真正的目标分析运行时,做额外的分析和优化。。。喜欢它。

    哦,它的基础版本是免费的!
    http://www.eqatec.com/Profiler/