2014-09-30 77 views
0

我在調試項目時發現奇怪的Visual Studio 2010行爲。變量字符串s已初始化爲"",但調試器顯示垃圾。調試點位於s初始化的第二行。垃圾進行調試

enter image description here

如果我這樣做cout<<s,它打印正常價值 - 而不是垃圾。

一個更IMMAGE將舒爾在哪裏斷點 enter image description here

在其他項目的地方調試器工作正常。我有垃圾的程序是win消息處理程序。 消息來自同一個項目的其他線程。

LRESULT CMainWindow::OnMessageAuthorise(WPARAM wParam, LPARAM lParam) 
{ 
string s= ""; 
... 
} 

什麼是wron?

UPD: 問題出在配置文件調試/發佈選擇。如果我選擇發佈,我在變量上有這些垃圾。爲什麼是這樣?

+0

斷點在哪裏? – herohuyongtao 2014-09-30 14:23:19

+0

在初始化的第二行(如果(ad.t ... – vico 2014-09-30 14:25:27

+0

)如何將它打印出來? – herohuyongtao 2014-09-30 14:29:29

回答

1

簡短回答:除非您願意檢查反彙編,否則無法在發佈版本中設置手錶。這就是調試版本的作用。

較長的答案:在發佈版本中,許多優化可以使變量名稱映射到內存地址更困難。最簡單的情況 - 變量可能有內存地址:它只能保存在寄存器中。傳統的PDB文件(保存的文件 - 此映射信息)甚至沒有嘗試應對來自優化的困難,但自VS2012 a new switch takes a substantial step in that direction