2010-08-27 65 views
1

我正在使用Visual Studio 2008中的一個C++應用程序 我以最大速度(/ o2)構建了我的項目(從屬性 - >配置屬性 - > c/C++ - >優化 - >優化) 無法在調試代碼時觀察變量值。請幫助。無法在Visual Studio中觀察變量值並將編譯器優化設置爲最大化速度(/ O2)

+0

恐怕這是一個已知的問題,因爲當優化編譯器可以完全消除一些變量,或將它們保持在奇怪/多重重疊的位置時,會使調試器混淆。請參閱http://msdn.microsoft.com/en-us/library/606cbtzs.aspx。 – 2010-08-27 08:34:54

回答

6

這是正常現象。一旦你激活了優化,編譯器幾乎忽略了你的所有變量請求,並試圖做它認爲最好的。

還有就是爲什麼調試版本沒有優化的理由啓用:)

編輯:你可能有一些運氣啓用或禁用優化的代碼的特定位。試試這個鏈接:http://msdn.microsoft.com/en-us/library/chh3fb0k(VS.80).aspx

+0

那麼,是不是可以優化調試版本?如果我想更快地進行調試呢? 如果不允許在調試版本中進行優化,那麼當用戶設置優化時,它是否會給出任何警告? – bjskishore123 2010-08-27 08:37:07

+0

沒有任何警告,變量只是在它們移動/合併時排列「消失」。 – Blindy 2010-08-27 08:41:38

+2

@ bjskishore123:您仍然可以調試發佈版本。但是你必須忍受你的代碼在某種程度上被破壞,因爲這是優化*做的*。如果優化從代碼中刪除了一個變量,那麼您顯然無法在調試器中觀察它。在「堅守我寫的代碼」與「將我的代碼轉換爲更高效的代碼」之間有一個權衡,其中後者意味着源代碼所說的內容(例如變量存在或該行N在第N + 1行之前執行)以及運行或調試應用程序時實際發生的情況 – jalf 2010-08-27 08:44:11

2

有時候使用C++代碼的「反彙編視圖」,並通過優化發行版x86,可以讓您瞭解發生了什麼。要特別注意函數調用(很多時候這些函數不能被優化),以及圍繞這些調用的代碼 - 前後,註冊使用情況(很多時候變量優化到硬件寄存器中)。

無論這個工作是否有效,您都會學習一些關於x86彙編,編譯器優化以及C++如何實際實現的知識!