C#怎么可以假==真?见图

时间:2010-01-19 22:31:23

标签: c# .net visual-studio debugging

我刚遇到了令人难以置信的错误之一。 false == true您需要确认/调试此行为的信息是什么?我从来没有见过这样的东西。

enter image description here

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

编辑: 我做了一个干净的>重建,但仍然一样。

这是装配和寄存器。我不知道怎么读这个,但也许它可以帮助别人。

8 个答案:

答案 0 :(得分:42)

我认为您的PDB文件不同步,并且您在实际执行的内容和Visual Studio看到的行号方面存在差异。尝试重建。我们都知道,true = false或我们所知道的世界不可能改变: - )

答案 1 :(得分:11)

它是否真的抛出错误?如果你输入错误的pdb,调试器通常可以突出显示错误的行,所以这可能是一个错误的引导。使用“立即”窗格重现测试后更改值也是微不足道的。

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

如果result不是bool,而是您自己的自定义类型,则可以覆盖==,或提供自定义true / false运算符

答案 2 :(得分:7)

源可能与正在运行的版本不对应,或者调试器中存在错误。

答案 3 :(得分:6)

部分问题在于您假设调试器100%正确。它实际上不是并且受到许多情况的影响,其中值可能具有不正确或误导性的显示。最常见的原因是......

  • PDB文件不匹配。这通常会导致调试器中至少出现一个关于不匹配的源文件的警告对话框,但并不总是
  • 基础表达式评估程序的简​​单数据检查或显示错误。在这种情况下不太可能,因为它是一个简单的本地和原始类型。
  • 导致数据显示不正确的优化。

但事实上它几乎肯定不是假的。验证这一点的最简单方法是使用Debug.WriteLine调用将值输出到输出窗口。

答案 4 :(得分:4)

你确定抛出异常吗?我的预感是你的方法isContextSignatureValid实际上是抛出一个异常,但是Visual Studio调试器有时可以超越自身并突出显示一条实际上没有抛出异常的行。

答案 5 :(得分:3)

也许你在休息模式下无意中用鼠标移动了当前的指令指针(黄色箭头)......它发生在我身上,我翻了出来。 : - )

答案 6 :(得分:2)

只是添加一点建议:

如果您从调试器中得到令人困惑的结果,请在其中粘贴Console.WriteLine()并获取代码本身以告诉您发生了什么。这通常可以消除困惑。

(在调试发布代码时你也可以得到这样的效果,但你说这是一个调试版本,可以消除那个嫌疑人)

答案 7 :(得分:0)

我之前见过这种事。一位同事确信他发现了.Net Framework或CLR中的一个错误。最后,它只是一个旧的程序集或pdb同步问题。