[英]Profiling programs written in C or C++
你會建議什么最好的工具來分析 C/C++ 代碼並確定哪些部分花費的時間最多。 目前,我只是依靠日志,但是由於引入了不必要的延遲,因此信息當然不准確。
優選地,如果存在這樣的工具,該工具還能夠檢測/建議可以優化的區域。
平台:Linux
該應用程序應在嵌入式環境中使用,因此它應該是輕量級的和外部的(不是某些 IDE 上的插件)。
我可以衷心推薦callgrind
與KCachegrind結合使用。
linux/freebsd 上的“gprof”是一個非常簡單有效的工具,可以識別哪些例程在運行時占用 CPU。 它提供了函數的嵌套和平面配置文件。 它為您提供在分析器運行時執行的每個 function 占用的 CPU 時間百分比,以及 function 本身占用的百分比,以及其子函數占用的百分比。 這可以幫助您輕松隔離有問題的功能。
我使用 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 插件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.