调试中的垃圾

时间:2014-09-30 14:21:50

标签: visual-studio-2010 visual-c++

我在调试项目时发现了奇怪的Visual Studio 2010行为。变量字符串s已使用""初始化,但调试程序显示垃圾。调试点位于s初始化的第二行。

enter image description here

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

另外还有另一个缺点就是断点 enter image description here

在其他项目中,调试器工作正常。我有垃圾的过程是win消息处理程序。 消息是从同一项目的其他线程传输的。

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

什么是wron?

UPD: 问题出在配置文件Debug / Release选择中。如果我选择Release我在变量上有这些垃圾。为什么会这样?

1 个答案:

答案 0 :(得分:1)

简短回答:除非您愿意检查反汇编,否则无法在发布版本中设置监视。这就是调试版本的用途。

更长的答案:在发布版本中,许多优化可以使变量名称到内存地址的映射更加困难。最简单的情况 - 变量可能有 no 内存地址:它只能保存在寄存器中。传统的PDB文件(包含这些映射信息的文件)甚至没有尝试应对优化带来的困难,但自VS2012以来a new switch takes a substantial step in that direction