你会建议什么最好的工具来分析 C/C++ 代码并确定哪些部分花费的时间最多。目前,我只是依靠日志,但是由于引入了不必要的延迟,因此信息当然不准确。
优选地,如果存在这样的工具,该工具还能够检测/建议可以优化的区域。
平台:Linux
该应用程序应在嵌入式环境中使用,因此它应该是轻量级的和外部的(不是某些 IDE 上的插件)。
我可以衷心推荐callgrind
与KCachegrind结合使用。
linux/freebsd 上的“gprof”是一个非常简单有效的工具,可以识别哪些例程在运行时占用 CPU。它提供了函数的嵌套和平面配置文件。它为您提供在分析器运行时执行的每个函数占用的 CPU 时间百分比,以及函数本身占用的百分比,以及其子函数占用的百分比。这可以帮助您轻松隔离有问题的功能。
我使用 Microsoft Visual C++ 的分析器获得了很好的体验,还有其他外部程序,例如Intels VTune,但它们中的大多数都不是免费的。
取决于平台。如果您使用的是 MSVC,则它的某些版本具有内置的分析器。AMD 和 Intel 都有可用的分析器(CodeAnalyst 和 VTune)。
在 Linux 上,我唯一使用的是 gprof,但我知道还有其他的(我认为 AMD 或 Intel 的也可能在 Linux 版本中可用)
当然,整个 Valgrind 套件也可能会有所帮助。一些工具,如 callgrind 或 cachegrind 可以为您提供大量有关性能的信息。
有很多很好的分析工具,比如 Quantify 或 KCachegrind。这些工具的一个问题是它们会降低运行时性能,因此在某些大型系统上它们可能无法很好地扩展。
有时只需在调试器中运行并按 ctrl-c,查看堆栈跟踪并重复此操作可能 4 次就足够了。
如果你总是在代码的同一部分,那么你已经找到了你可能花费大部分时间的地方。
你显然想要两件事:
分析您的代码并对其进行测量。
检测可以优化的区域。
这些是不同的问题。尽管您可能被告知了什么,但它们并不相同。
对于问题 (1),将建议许多好的分析器。
对于问题 (2),分析器只能间接帮助。
有一种更简单且通常更有效的技术。
如果您使用的是 Windows,我建议您使用AQTime。支持几乎所有的编译器,包括 .NET、Delphi 和 VB(当然还有所有的 C++ 编译器 (; ),并且是我尝试过的最好的分析工具。它不仅仅是一个性能分析器。
对于性能测量, oprofile是一个不错的选择,因为Linux 工具项目 中有一个用户友好的 eclipse 插件。