2012-05-31 52 views
0

我將使用IBM量化對嘗試比較在我的程序調用不同功能的運行時間,但頭疼的是,許多函數調用了DEBUG宏outputing這樣的東西,調試信息的影響分析結果C++

#ifdef DEBUG 
cout << "Value is "<< value << endl; 
#endif 

當我進行分析時,發現這些IO操作花費了大部分時間,當然我關心的是發佈版本的實際運行時間。有什麼我可以做的,以獲得更準確的結果發佈版本,而不是手動刪除這些DEBUG宏?

我在調試模式下使用Visual Studio編譯器構建代碼,當我使用-o選項構建它時,無法運行分析說沒有可用的調試信息。

回答

3

您一定會想要使用發佈版本進行分析。您可以修改項目設置,以便爲發佈構建發佈PDB。

+0

不知道我能做到這一點,非常感謝! – Derek

+0

嗨,我得到了另一個問題。我建立了發佈的版本,PDB也在那裏,但似乎Quantify無法識別DLL時,我將它添加到性能分析運行。有沒有一種方法可以將PDB與發佈的DLL鏈接起來? – Derek

+0

鏈接器使用映射和相關PDB文件中的唯一標識(GUID)將PDB自動「綁定」到您的DLL映像文件。這裏(http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P)更多關於這個綁定機制的信息和一種測試方法。 – mox

0

我將問題分爲兩部分,即時間的總體測量,然後獲取百分比。 總體測量很簡單 - 給它足夠的工作至少需要幾秒鐘,然後才能計時。如有必要,只需循環10或1000次。

然後爲了獲得百分數,它在運行時捕獲一些堆棧圖。您可以使用堆棧抓取器,或者使用暫停按鈕(重複)擊中它並複製粘貼調用堆棧。 函數處於活動狀態的時間百分比是它在堆棧上的時間百分比,大約是包含它的堆棧跟蹤的百分比。 這並沒有告訴你只有一小部分的功能,但改變這些功能並不會節省很多。