Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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# VisualStudio2008中的If语句怪异_C#_.net_Runtime - Fatal编程技术网

C# VisualStudio2008中的If语句怪异

C# VisualStudio2008中的If语句怪异,c#,.net,runtime,C#,.net,Runtime,我遇到了一个非常奇怪的问题,我记录了我的会议,因为我认为没有人会相信我 我遇到了一个似乎处于非常基本水平的bug。这是一个单线程应用程序,im所做的一切都是计算布尔值 布尔值等于false,但是,if语句的执行就好像它是true一样……有点像。你会明白我的意思的。我已经清理了解决方案并重建了很多次。不知道发生了什么事 请给我解释一下 我猜在部署时发生了一些奇怪的事情,因此pdb与实际代码不同步。如果您使用日志记录而不是调试器来了解发生了什么,我怀疑您会看到更明智的行为。我怀疑是CLR本身行为怪异

我遇到了一个非常奇怪的问题,我记录了我的会议,因为我认为没有人会相信我

我遇到了一个似乎处于非常基本水平的bug。这是一个单线程应用程序,im所做的一切都是计算布尔值

布尔值等于false,但是,if语句的执行就好像它是true一样……有点像。你会明白我的意思的。我已经清理了解决方案并重建了很多次。不知道发生了什么事

请给我解释一下


我猜在部署时发生了一些奇怪的事情,因此pdb与实际代码不同步。如果您使用日志记录而不是调试器来了解发生了什么,我怀疑您会看到更明智的行为。我怀疑是CLR本身行为怪异,带有“如果”-更可能是调试器/运行时不一致。

我认为这看起来像是调试步进范围刚刚关闭的情况。您不能总是信任调试器中的黄色突出显示。你不是真的介入。在早期的F#Betas中,我们有很多这样的bug,黄色的突出部分会疯狂地跳来跳去。调试器的突出显示主要取决于编译器写入.pdb文件的内容,即对应于特定编译指令集的“源范围”

这是什么版本的VS/C

编辑
在看到其他人的答案后,确实一个可能的原因是你的.pdb文件与你的.dll不同步。

我以前见过很多次。基本上,您正在调试的代码与您看到的代码不匹配

我不知道这是什么原因,解决方案遵循cargo cult指南

  • 关闭Visual Studio的所有副本
  • 删除此项目的所有bin和object文件夹
  • 删除所有.NET项目的所有bin和object文件夹
  • 删除在“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NET临时文件”中找到的所有文件

    • 一周前我也有同样的问题。还有最新的SP.WinForms应用程序VS2008。该值为false,但如果始终执行body,则为
      。我在做和你录像里一样的调查。以下是我的代码:

       if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion))
           throw new SimulationFormatException(ws, ss);
      
      procedure Test;
      begin
          Line1;
          Line2;
          Line3;
          line4;
      end;
      
      在没有编译为“Release”的调试器的情况下运行是可以的。试试看

      我想VS2008调试器中有一个bug。用“if”和“throw”关键字以某种方式复制


      编辑:上面的“执行”字是错误的,当然是错误的必须使用“已介入但未执行”。

      我很久以前在Delphi中看到过类似的情况,所以我的问题是:您是为发布或调试而编译,有优化还是没有优化

      我询问的原因是,有一次,在调试会话期间,我发现了一个由4-5行代码组成的小过程,根据调试器,该过程似乎正在反向执行

      基本上,使用以下类型的代码:

       if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion))
           throw new SimulationFormatException(ws, ss);
      
      procedure Test;
      begin
          Line1;
          Line2;
          Line3;
          line4;
      end;
      
      根据调试器,执行顺序如下:

      procedure Test;
      begin             start -+
          Line1;               |                             +-> here -+
          Line2;               |                   +-> here -+         |
          Line3;               |         +-> here -+                   |
          line4;               +-> here -+                             |
      end;                                                             +-> end
      
      原因是这些行之间没有副作用,因此编译器通过重写代码来“优化”代码,实际上重新排列代码,使其看起来完全相反地执行

      那么,您是否有一个向下的throw语句,它实际上是正在执行的语句,但是编译器显示它是您遇到问题的语句,因为,由于重新排列代码,两个throw语句实际上只作为可执行代码发出一次

      注意:我没有任何理由知道这就是Visual Studio正在做的事情,但这正是我看到您的视频时想到的。

      只是在这里添加了一个“我也是”来突出显示代码。我正在用C#运行VS2008。我有一个Windows窗体项目引用另一个项目中的类库,我正在逐行调试这两个类库。“在某个点上”,调试中的黄色高亮显示与实际执行的行之间的距离在14到20行之间

      我关闭了VS,打开了这两个项目的目录,删除了这两个目录中bin/Debug和obj/Debug的所有内容,然后重新启动VS。在重新编译和逐步调试时,一切又恢复正常

      我不知道问题是在.manifest、.pdb文件中还是在.Cache文件中。没关系。把这一切都吹走,一切都会好起来的


      FWIW,谷歌搜索几乎是无用的,只不过它返回了这么多线程。所有其他的点击都是关于VC++模板和VS2005的问题,其中一个SP解决了这个问题。这不是同一个问题。

      VS的哪个版本?你是否应用了最新的service pack?你能发布为该代码生成的IL吗?几个月前,我看到了关于同一场景的另一个问题,但我一生都找不到它来查看原因/解决方案。旁白:你使用了哪个工具创建视频?帧速率看起来比我用Camtasia管理的更平滑。您是否使用像PostSharp这样的AOP工具在构建后/作为构建的一部分修改程序集?从你点击调试按钮到你的代码开始,看起来不是这样,但是在某些情况下,当涉及到与源代码行相关的可执行代码的位置时,这些也会使调试器失效。我自己已经清除了bin文件夹,我们正在讨论一个新的构建。我喜欢加入调试语句来查看发生了什么。我试试这个。谢谢你,乔恩,等一下。调试我正在升级的ASP.NET应用程序有时会使调试器出现一些问题。最简单的例子是,当您在方法中插入一些代码时,开始调试,并看到这些行从未执行过——它们只是跳过。或者当调试器高亮显示一行但实际执行下一行时。删除obj/和bin/文件夹总是对我有帮助。我已经删除了bin文件夹中的所有文件,我完全忘记了obj和t