當前方法的代碼已經過優化,因此無法計算表達式的值
/***********************************************************************************/
解決方法:vs2010->工具->選項->調試->常規->勾選“啟用.NET Framework源代碼單步執行”,不勾選“啟用‘僅我的代碼’(僅限托管)”。點擊確定后,會有一個下載公共符號的過程,如下圖,耐心等待下載完成,並重啟調試即可。
/**************************************************************************************/
VS2010中調試.NET Framework的源代碼:處理無法計算表達式的值的錯誤(轉)
在使用VS2010調試MS提供的.NET Framework源代碼的時候,有可能你會碰到在調試的時候,很多變量都是不能正常查看的。而在極端的時候,你查看所有的變量都會報錯,比如:當前方法的代碼已經過優化,因此無法計算表達式的值。
我這兩天就碰到VS2010 報:"當前方法的代碼已經過優化,無法計算表達式的值"的這個錯誤了,具體的錯誤截圖如下圖。
這個錯誤結果非常明顯,就應該是我執行的時候,執行的是已經經過優化過的代碼了,但是在那里設置,還真是不知道。在網上搜索,這方面信息也不多,發現最多的說法是:
- 當前運行的版本應該設置為Debug;
- 如果不行,嘗試下,先Step over下,在查看下值;
當然,這些嘗試都對我無效,還有一個說法是設置問題(其實就是要啟用Debug .NET Framework的設置方法):
- 在工具->選項->調試->符號->設置:設置好 (標准步驟)
- 在工具->選項->調試->常規->勾選 啟用.NET Framework源代碼單步執行
- 在工具->選項->調試->常規->不勾選 啟用"僅我的代碼"(僅限托管) (這個是在上一步操作的時候,系統會自動提示你的,確定就去掉勾選了)
設置好類似下面這樣的:
當然這些對我的這個報錯都沒有用,但我還是決定將它們列出來,相信對其他的朋友會有一定的幫助。
我的這個"當前方法的代碼已經過優化,因此無法計算表達式的值"在中文搜索是沒有找到多少有價值的參考,無奈,我只好選擇英文搜索下:Cannot evaluate expression because the code of the current method is optimized. 如果你需要查找,可以使用這個作為關鍵詞試試,當然,遺憾的是我在初步看下來的時候,並沒有我需要的信息(也許有,沒看到),大部分的都是問為什么自己的代碼在調試會出現這個問題。
在問題明確的前提下,我的目標明確而單一——就是找個方法,讓VS2010 在調試的時候禁止啟用優化。
最終我找到了方案:其中How to disable optimizations during debuging給出了其他人的兩個不同方案。E文好的可以直接參閱,我這里簡要說明下這兩個方案,為E文不是很好的朋友拋個磚:
- 在啟動的時候設置環境變量,讓VS2010啟動的時候加載之后,在代碼調試的時候不執行優化:
這個方法理論不難,第一步:是在cmd下來啟動VS2010,你輸入
## 設置環境變量
> set COMPLUS_ZapDisable=1
## 這里路由到你VS2010安裝的目錄下面,這句是原文的,在我機器上用不了
## 因此,如果你要使用,請改成適當的路徑
> cd /d "%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\ide\"
## 啟動VS2010
> start devenv.exe
## 退出CMD
> exit
第二步:在進入VS2010 加載要調試的程序之后,右鍵項目->屬性->調試->不勾選 啟用Visual Studio 承載進程,保存。

第三步:不用說,調試吧。
注意,這里我要補充下,在Web 程序測試的時候,並沒有上面那項:啟用Visual Studio,也沒有調試Tab,因此,不用操作第二步即可。我的Web程序就在第一步設置變量后成功追蹤到參數值。
- 是在需要調試的目錄中創建和應用程序名稱一樣的一個.ini文件,比如你程序是ABC.exe,那么你需要的是一個ABC.ini文件。
這個方法同樣也是要配置參數的,只不過將參數放到了應用程序下面來操作,具體操作你可以參照MSDN上的這篇文章來做,簡單點說,就是在程序同目錄下,放同名的ini文件,文件內容為下面這些內容:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0