代码之家  ›  专栏  ›  技术社区  ›  Arron S

C#false==true怎么可能?看图

  •  27
  • Arron S  · 技术社区  · 16 年前

    我刚刚遇到了有史以来最令人难以置信的错误之一。false==true你们需要什么信息来确认/调试这个行为?我从未见过这样的事。

    enter image description here

    • VS2008 sp1
    • 调试模式|任何Cpu
    • IIS 7.5

    我做了一个干净的->重建并保持不变。

    8 回复  |  直到 14 年前
        1
  •  42
  •   Darin Dimitrov    16 年前

    我假设您的PDB文件不是同相的,您在实际执行的内容和VisualStudio视为行号的内容上存在差异。尝试重建。我们都知道这是不可能的 true = false ,或者我们所知道的世界可能会改变:-)

        2
  •  11
  •   Marc Gravell    16 年前

    它真的抛出了错误吗?如果您向调试器提供了错误的pdb,调试器通常会突出显示错误的行,因此这可能是错误的引导。在测试后使用“立即”窗格更改值也很简单。

    如果 result 是一个字段或捕获的变量,也可以由外部代码设置(可能在另一个线程上)。

    如果 那不是一个 bool 但是您自己的自定义类型,您可以只覆盖 == ,或提供一个自定义 true false

        3
  •  7
  •   Mehrdad Afshari    16 年前

    可能源代码与正在运行的版本不一致,或者调试器中存在错误。

        4
  •  6
  •   JaredPar    16 年前

    • 不匹配的PDB文件。这通常会导致调试器中至少出现一个关于不匹配源文件的警告对话框,但并不总是这样
    • 导致数据显示不正确的优化。

    但事实上,这几乎肯定不是假的。验证这一点的最简单方法是使用 Debug.WriteLine

        5
  •  4
  •   womp    16 年前

    你确定抛出的是异常吗?我的直觉是,您的方法isContextSignatureValid实际上正在引发异常,但Visual Studio调试器有时会超越自身,突出显示一行实际上没有引发异常。

        6
  •  3
  •   CesarGon    16 年前

    可能您在中断模式下无意中用鼠标移动了当前指令指针(黄色箭头)。。。这件事发生在我身上一次,我就发疯了。:-)

        7
  •  2
  •   Jason Williams    16 年前

        8
  •  0
  •   forgot my open id login forgot my open id login    16 年前

    我以前见过这种事。一位同事确信他在.NETFramework或CLR中发现了一个bug。最后,这只是一个旧的程序集或pdb同步问题。