【发布时间】:2015-02-17 12:04:31
【问题描述】:
鉴于这段代码:
class Program
{
private static bool IsAdmin = true;
static void Main(string[] args)
{
if (!IsAdmin)
{
throw new Exception();
}
try
{
var x = 2342342;
var y = 123132;
}
catch (Exception)
{
throw;
}
}
}
鉴于this.IsAdmin 的结果为真 - 我希望调试器不会输入该 if 语句。实际上它确实 - 它跨过投掷但实际上并没有投掷!
现在,只有当您在 Visual Studio 2013 上的 if 语句后跟 try/catch 块中出现异常时,才会发生这种情况,目标是 .NET Framework 4,64 位,未选中“首选 32 位”。
我已经与不同机器上的同事确认了这种奇怪之处。单步执行以下代码,调试器似乎会进入 if 分支,但不会引发异常:
我处于调试模式,我已尝试多次编译和清理项目。
谁能解释为什么会这样?
【问题讨论】:
-
很好的发现,调试器对 IL 做了各种疯狂的事情,可能是优化前变量重新排序之类的
标签: c#