【发布时间】:2014-07-17 16:52:35
【问题描述】:
我在 Visual Studio 中有一些断点,在调试模式下调试时,它们被忽略了。
这仅在不使用变量时发生。 EG
string s = "10;
string t = "Hi";
return s;
在上面,如果我在string t 上设置断点,它不会停止。它也不会在调试窗口中显示“t”。如果我设置了手表,手表窗口中的消息是
当前上下文中不存在名称“t”
我要做的就是解决这个问题
string s = "10;
string t = "Hi";
string z = t; //pointless but the compiler now let's me focus on it
return s;
请注意,整个程序中的所有变量都会发生这种情况。
我自己的研究表明这是 JIT 做的;它正在为我优化代码并尽可能消除任何开销,但我认为它只会在发布模式下这样做?我这样做的目的是在重构代码时可以将新值与旧值进行比较。
我的问题是,我可以关闭这个编译器优化吗?
这个Visual studio 2010 debugger don't stop at Breakpoint? 没有帮助。
所有项目都是 .NET 4.0(我知道不同版本的 .NET 会混淆编译器)
在解决方案配置中,我已选择调试
在属性窗口中 -> Debug 也设置为 Debug
在属性窗口 -> 构建中,优化代码未选中
【问题讨论】:
-
你是对的,编译器甚至会给你一个警告,并且该代码不会成为生成的 IL 的一部分。
-
你在 SO 的其他帖子中搜索过这个吗?
-
我进行了搜索,因此我明白这是编译器@SyedFarjadZiaZaidi 的优化。为什么要问?
-
因为我看过一些关于 VS 调试问题的帖子。
-
如果你在
string s = "10;上设置断点并且当调试器命中它时,使用F10键移动到下一行会发生什么?是否到达string t = "Hi";行?
标签: c# visual-studio-2010