我在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会混淆编译器)
在解决方案配置中,我选择了调试
在属性窗口中 - >调试也设置为调试
在属性窗口中 - > Build,已优化代码未选中
答案 0 :(得分:1)
我猜您在该变量中存储了一些与调试器相关的日志。
您可以使用volatile
关键字,它基本上会说'#34;不要优化我!"到编译器:
volatile string t = "Hi"; // t won't be optimised.
关键字表明内存中的这个特定区域可以由其他一些方设置(例如另一个异步代码),因此编译器不会对其进行优化。
答案 1 :(得分:0)
答案是感谢@MikeCheel,他建议我删除了pdb文件。然后我注意到我的调试文件夹是空的,但我的发布文件夹里装满了文件。显然,问题必须是我的配置设置。
我现在很快发现了什么,我知道该找什么:
所以,我右键点击解决方案 - >特性
在配置属性下,我的项目在Debug下设置为Release。
这修复了它,遗憾的是,我的代码现在断言每一个地方,所以至少我知道它正在工作!