2012-11-22 51 views
17

我插入了兩個臨時變量並希望看到它們的值,但我不能。我可以通過將它放置在別的地方來解決它,但我很感興趣爲什麼存在這種行爲。調試時當前上下文中不存在變量

public float Value 
    { 
     get 
     { 
      float result = Memory.ReadFloat(Address); 

      double Radian = Math.Round(result, 2); // **BREAK POINT HERE** 
      double Degree = Math.Round(Math.Round((double)(result * 180/Math.PI)), 2); // **BREAK POINT HERE** 

      return result; // **BREAK POINT HERE** 
     } 
    } 

我突破了所有三點,但我無法讓Visual Studio 2012向我展示這些值。只有結果會顯示在本地窗口上,沒有變量稱爲Radian或Degree。

如果我添加一個手錶例如弧度變,我得到這個消息以紅色十字圖標:

弧度 - 「弧度」並不在當前的背景下存在的名稱

回答

52

JIT編譯器可以將局部變量優化掉。由於您使用的是Visual Studio,因此您可以將配置切換到調試和重建。

如果不是,您可以配置JIT編譯器以禁用優化並生成跟蹤信息 - 請參閱here on how to set the configuration。這應該允許您在將調試器附加到進程時看到本地變量。

+2

謝謝。從視覺工作室來看,似乎很愚蠢的是優化代碼,而這些代碼已經有了斷點。很明顯,我想使用它:D –

+6

我將配置管理器從發佈更改爲調試,現在可以運行 – riaandelange

19

我遇到在VS2012另一種情況導致變量「消失」,而在調試模式:

確保你不會有這樣的:

if(false) 
    { 
    . 
    } 
else 
    { 
    //Code here will be optimized and variables will not be available. 
    } 
+0

請嘗試閱讀此http://stackoverflow.com/about,以獲取有關此處的問題/解答的更多理解所以。你的貢獻沒有回答這個問題。這是更多的評論,你可以添加一次,你會增加你的聲譽:http://stackoverflow.com/faq#reputation –

+9

@RadimKöhler,你錯了。他放在這裏的答案拯救了我的一天,我瘋狂地解決了這個問題,它解決了這個問題。我在代碼中添加了一個if(false),以避免長時間運行並測試另一個點,我的錯誤與ishayle描述的相同 –

+5

@DiegoMendes如果這對您有幫助,那麼**我錯了!**很高興看到... –

6

如果你試圖調試在發佈版本(發佈模式而不是調試模式)中,您會看到這個錯誤。將您的解決方案配置更改爲調試(任何CPU),您將能夠在即時窗口中看到變量值。

+0

發生在我身上的事情是,所有在調試中的項目都被設置爲釋放,所以所有的代碼都被優化了......直到我看到你的答案,我才意識到它,它清除了我最近有很多問題:) – Asken

0

我將我的解決方案配置更改爲調試(任何CPU),但這不是問題。升級到Visual Studio 2017後,我以爲我在調試,但有一個更簡單(但重要)的步驟。 (這可能很明顯,但我錯過了。)其中「解決方案配置」設置爲「調試」我還必須單擊「調試」旁邊的向下箭頭並選擇「配置管理器...」,然後在相應的彈出窗口「配置」仍然設置爲「發佈」 - 我必須將其更改爲「調試」,然後單擊「關閉」按鈕。從那裏重新運行允許我在調試時查看所有變量。

相關問題