【问题标题】:VS 2010 is ignoring break pointsVS 2010 忽略断点
【发布时间】: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


【解决方案1】:

答案要感谢@MikeCheel,他建议我删除 pdb 文件。就在那时,我注意到我的调试文件夹是空的,但我的发布文件夹中满是文件。显然,问题必须是我的配置设置。

我很快就发现了我现在知道要寻找什么的地方:

所以,我右键单击解决方案 -> 属性

在配置属性下,我的项目在Debug下设置为Release。

这修复了它,遗憾的是,我的代码现在到处都在断言,所以至少我知道它正在工作!

【讨论】:

    【解决方案2】:

    我猜您在该变量中存储了一些与调试器相关的日志。 您可以使用volatile 关键字,它基本上说“不要优化我!”给编译器:

    volatile string t = "Hi";  // t won't be optimised.
    

    关键字表明内存中的这个特定区域可以由其他方设置(例如另一个异步代码),因此编译器不会对其进行优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 2013-05-28
      相关资源
      最近更新 更多