簡體   English   中英

什么是非常簡單的 C++ 分析器 (VC++)?

[英]What's a very easy C++ profiler (VC++)?

我過去使用過一些分析器,但從未發現它們特別容易。 也許我選擇了不好的,也許我真的不知道我在期待什么! 但是我想知道是否有任何“標准”分析器可以簡單地插入並工作? 我認為我不需要大量詳細的報告,只是為了找出主要的黑點。 在這一點上,易用性對我來說更重要。

我們正在使用的是 VC++ 2008(我個人運行標准版)。 我不認為IDE中有任何工具可以解決這個問題,我看主菜單看不到任何工具?

我建議一個非常簡單的方法(我從閱讀Mike Dunlavey關於 SO 的帖子中學到的):

只需暫停程序。

多做幾次以獲得合理的樣本。 如果一個特定的函數占用了你程序一半的執行時間,那么你很可能會很快地捕捉到它。

如果您將該函數的性能提高 50%,那么您只是將整體執行時間提高了 25%。 如果你發現它甚至根本不需要(我在使用這種方法的短時間內發現了幾個這樣的情況),你只是將執行時間減少了一半。

我必須承認,起初我對這種方法的有效性持懷疑態度,但在嘗試了幾個星期之后,我就上癮了。

VS內置:

如果您有團隊版,則可以使用Visual Studio 分析器


其他選項:

否則檢查這個線程


輕松創建自己的:

我個人使用基於 Win32 API QueryPerformanceCounter的內部構建的。 您可以在 100 行或更少的代碼中制作出漂亮且易於使用的東西。

這個過程很簡單:在您要分析的每個函數的頂部創建一個名為 PROFILE_FUNC() 的宏,它將添加到內部管理的統計信息中。 然后有另一個名為 PROFILE_DUMP() 的宏,它將輸出轉儲到文本文檔。

PROFILE_FUNC() 創建一個對象,該對象將使用 RAII 記錄直到對象被銷毀的時間量。 此 RAII 對象的構造函數和析構函數都將調用QueryPerformanceCounter 您還可以將這些行保留在代碼中並通過#define PROFILING_ON控制行為

我一直使用 AMD CodeAnalyst,我發現它非常易於使用並給出了有趣的結果。 我一直使用基於時間的配置文件,我發現它與我的應用程序的調試信息配合得很好,讓我可以找到在過程、C++ 指令和單個匯編指令級別上花費的時間。

我過去使用lt prof快速運行我的 C++ 應用程序。 它工作起來非常簡單,可以使用已編譯的程序運行,不需要和源代碼掛鈎或調整。 我相信有一個試用版。

一種非常簡單(且免費)的分析方法是安裝 Windows 調試器 (cdb/windbg),在感興趣的位置設置 bp,然后發出wt命令(“Trace and Watch Data”)。 查看MSDN了解更多信息。

另一個適用於任何編程語言的超級簡單且有用的分析工作流是注釋掉代碼塊。 在注釋掉所有這些之后,取消注釋一些並運行您的程序以查看性能。 如果您的程序在取消注釋某些代碼時開始運行很慢,那么您可能需要檢查那里的性能。

暫無
暫無

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

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