2011-09-22 46 views
7

我正在使用的遊戲引擎在調試版本中太慢,無法調試遊戲。我希望編譯器內聯小函數(特別是在Vector/Matrix和容器類中)。這可能會或可能不會加快調試版本中的遊戲速度。在大量分析和試圖找出瓶頸之前,我想我會先嚐試這一點,因爲我不得不做最少的工作,結果可能是有希望的。調試版本中的內聯函數(Visual C++ 2008)

那麼,有沒有辦法讓Visual C++編譯器在調試版本中內聯函數?

回答

5

項目選項 - > C/C++ - >優化 - >內聯函數擴展。把它變成/Ob2。在Debug配置中執行此操作。

在Release中,內聯函數擴展是由其他優化設置隱含的,所以即使默認情況下所有配置都對該設置表示「默認」,但行爲確實不同。

我相信調試版本應該具有與發佈一樣的內聯擴展行爲;真的沒有理由不這樣做。

http://msdn.microsoft.com/en-us/library/47238hez.aspx

+0

感謝您的回答,我會在找到時間後立即檢查,然後檢查標記答案。 – Samaursa

+0

我檢查這是正確的,因爲在VS幫助文件中沒有跡象表明這對於調試版本不起作用(編譯器警告不支持編譯器標誌)。我能夠打入最簡單的一行功能,但是我無法在發行版中這樣做。除非我看着裝配,否則不確定它是否內聯。 – Samaursa

+0

這會導致調試器變得「困惑」嗎? – paulm

-1

DEBUG是由Visual Studio定義當一個項目在調試模式,這樣編譯:

#ifdef DEBUG 
    inline void fn() { 
#else 
    void fn() { 
#endif 
+0

問題是,在調試時,編譯器完全忽略了'inline'關鍵字 – Samaursa

0

你可以嘗試__forceinline。請務必閱讀該頁面上的調試版本(關閉/Ob0選項)。

我懷疑這是不會改變性能的。如果您還沒有嘗試過的另一件事,那就是將符號添加到發佈版本中。它可以很好地調試很多問題。

0

你混淆了兩個編譯器選項。 /O影響優化,包括內聯。 /ZI創建用於調試的PDB文件。它們可以獨立設置。

雖然克隆「調試」配置可能很有用,並且可以使用/O1/ZI創建「調試優化」配置。

+0

他們可以,是的,但隨着優化,太多的東西被優化。例如,在調試信息上進行優化時,大部分時間都無法正確調試字符串。即使有調試信息,調試器也無法顯示許多本地變量的值,並進行優化。 – Samaursa