我正在使用的遊戲引擎在調試版本中太慢,無法調試遊戲。我希望編譯器內聯小函數(特別是在Vector/Matrix和容器類中)。這可能會或可能不會加快調試版本中的遊戲速度。在大量分析和試圖找出瓶頸之前,我想我會先嚐試這一點,因爲我不得不做最少的工作,結果可能是有希望的。調試版本中的內聯函數(Visual C++ 2008)
那麼,有沒有辦法讓Visual C++編譯器在調試版本中內聯函數?
我正在使用的遊戲引擎在調試版本中太慢,無法調試遊戲。我希望編譯器內聯小函數(特別是在Vector/Matrix和容器類中)。這可能會或可能不會加快調試版本中的遊戲速度。在大量分析和試圖找出瓶頸之前,我想我會先嚐試這一點,因爲我不得不做最少的工作,結果可能是有希望的。調試版本中的內聯函數(Visual C++ 2008)
那麼,有沒有辦法讓Visual C++編譯器在調試版本中內聯函數?
項目選項 - > C/C++ - >優化 - >內聯函數擴展。把它變成/Ob2
。在Debug配置中執行此操作。
在Release中,內聯函數擴展是由其他優化設置隱含的,所以即使默認情況下所有配置都對該設置表示「默認」,但行爲確實不同。
我相信調試版本應該具有與發佈一樣的內聯擴展行爲;真的沒有理由不這樣做。
DEBUG
是由Visual Studio定義當一個項目在調試模式,這樣編譯:
#ifdef DEBUG
inline void fn() {
#else
void fn() {
#endif
問題是,在調試時,編譯器完全忽略了'inline'關鍵字 – Samaursa
你可以嘗試__forceinline
。請務必閱讀該頁面上的調試版本(關閉/Ob0
選項)。
我懷疑這是不會改變性能的。如果您還沒有嘗試過的另一件事,那就是將符號添加到發佈版本中。它可以很好地調試很多問題。
你混淆了兩個編譯器選項。 /O
影響優化,包括內聯。 /ZI
創建用於調試的PDB文件。它們可以獨立設置。
雖然克隆「調試」配置可能很有用,並且可以使用/O1
和/ZI
創建「調試優化」配置。
他們可以,是的,但隨着優化,太多的東西被優化。例如,在調試信息上進行優化時,大部分時間都無法正確調試字符串。即使有調試信息,調試器也無法顯示許多本地變量的值,並進行優化。 – Samaursa
感謝您的回答,我會在找到時間後立即檢查,然後檢查標記答案。 – Samaursa
我檢查這是正確的,因爲在VS幫助文件中沒有跡象表明這對於調試版本不起作用(編譯器警告不支持編譯器標誌)。我能夠打入最簡單的一行功能,但是我無法在發行版中這樣做。除非我看着裝配,否則不確定它是否內聯。 – Samaursa
這會導致調試器變得「困惑」嗎? – paulm