我在调试项目时发现了奇怪的Visual Studio 2010
行为。变量字符串s
已使用""
初始化,但调试程序显示垃圾。调试点位于s
初始化的第二行。
如果我cout<<s
,它会打印正常值 - 而不是垃圾。
另外还有另一个缺点就是断点
在其他项目中,调试器工作正常。我有垃圾的过程是win消息处理程序。 消息是从同一项目的其他线程传输的。
LRESULT CMainWindow::OnMessageAuthorise(WPARAM wParam, LPARAM lParam)
{
string s= "";
...
}
什么是wron?
UPD: 问题出在配置文件Debug / Release选择中。如果我选择Release我在变量上有这些垃圾。为什么会这样?
答案 0 :(得分:1)
简短回答:除非您愿意检查反汇编,否则无法在发布版本中设置监视。这就是调试版本的用途。
更长的答案:在发布版本中,许多优化可以使变量名称到内存地址的映射更加困难。最简单的情况 - 变量可能有 no 内存地址:它只能保存在寄存器中。传统的PDB文件(包含这些映射信息的文件)甚至没有尝试应对优化带来的困难,但自VS2012以来a new switch takes a substantial step in that direction。