Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试器进入条件为false的if()块_C# - Fatal编程技术网

C# 调试器进入条件为false的if()块

C# 调试器进入条件为false的if()块,c#,C#,鉴于这一系列代码: class Program { private static bool IsAdmin = true; static void Main(string[] args) { if (!IsAdmin) { throw new Exception(); } try { var x = 2342342;

鉴于这一系列代码:

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
生成true,我希望调试器不会输入if语句。事实上,它确实是这样的——它跨过了投掷,但实际上并没有投掷

现在,只有在Visual Studio 2013上,针对.NET Framework 4,64位,“首选32位”未选中时,if语句中出现异常,后跟try/catch块,才会发生这种情况

我与不同机器上的同事确认了这一奇怪现象。单步执行以下代码,调试器似乎会单步执行if分支,但不会引发异常:

我处于调试模式,我多次尝试编译和清理项目


有人能解释为什么会发生这种情况吗?

请查看链接。在某些版本的visual studio和.NET framework版本中,这是一个已知的错误。这是一个由x64抖动引起的已知问题,它偶尔会生成错误的调试行号信息。当一条语句导致生成额外的NOPs指令以对齐代码时,它可能会出错。第一个NOP成为行号,而不是NOP之后的指令。在一些地方,例如在简单的if()测试和使用??具有简单标量操作数的运算符。这些对齐NOP也是中止线程如此危险的原因,如中所述

最简单的解决方法是项目+属性,构建选项卡,勾选“首选32位”选项(如果可用),否则将平台目标设置为x86。请注意,在调试器建议执行throw语句时,实际上没有出现任何错误。您的程序实际上不会抛出异常


它正在工作中,x64抖动被彻底重写,一个名为RyuJIT的项目。它将在VS2015中发布,目前正在预览中。

我的理智保持得体,一切都很好!谢谢-唯一的问题是我花了这么长时间试图找出我的代码哪里不好-你不认为微软的东西会是罪魁祸首!谢谢他们到底在想什么。PS。。。今天遇到了这个问题。。。在VS2015中:(很好的发现,调试器对IL做了各种疯狂的事情,可能是预优化变量重新排序之类的