簡體   English   中英

用 C 或 C++ 編寫的分析程序

[英]Profiling programs written in C or C++

你會建議什么最好的工具來分析 C/C++ 代碼並確定哪些部分花費的時間最多。 目前,我只是依靠日志,但是由於引入了不必要的延遲,因此信息當然不准確。

優選地,如果存在這樣的工具,該工具還能夠檢測/建議可以優化的區域。

平台:Linux

該應用程序應在嵌入式環境中使用,因此它應該是輕量級的和外部的(不是某些 IDE 上的插件)。

我可以衷心推薦callgrindKCachegrind結合使用。

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. 檢測可以優化的區域。

這些是不同的問題。 盡管您可能被告知了什么,但它們並不相同。

對於問題 (1),將建議許多好的分析器。

對於問題 (2),分析器只能間接幫助。
有一種更簡單且通常更有效的技術。

看這里

如果我們談論的是 UNIX 世界,我會用 gprof / oprofile go。

您確實需要重新編譯您的應用程序(至少使用 gprof)。

教授

輪廓

如果您使用的是 Windows,我建議您使用AQTime 支持幾乎所有的編譯器,包括 .NET、Delphi 和 VB(以及所有 C++ 編譯器,當然 (;) 並且只是我從未嘗試過的最好的性能分析工具。

對於性能測量, oprofile是一個不錯的選擇,因為在Linux 工具項目中存在一個用戶友好的 eclipse 插件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM