如果在Visual Studio 2008中声明的怪事(If statement weirdness

2019-08-31 09:07发布

我碰到过这么奇怪的问题,那我录我的会议,因为我不认为任何人会相信的我。

我碰到这似乎是在非常基础的层面的错误。 这是一个单线程的应用程序,所有IM做的是评估一个布尔值。

布尔等于假,但是,如果语句执行,就好像它是真实的......之类的。 你会明白我的意思。 我已经清理解决方案,并多次重修。 不知道怎么回事。

我喜欢一些解释吧。

http://www.youtube.com/watch?v=ope9kxEyt4g

Answer 1:

我见过很多次了过去。 基本上是什么情况是,你正在调试的代码不符合您所看到的代码。

我不知道是什么原因导致这和解决方案如下货物邪教的准则。

  • 关闭Visual Studio中的所有副本
  • 删除所有你的bin和目标文件夹的这个项目
  • 删除所有你的bin和目标文件夹的所有.NET项目
  • 删除所有哟找到文件 “C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \临时ASP.NET文件”


Answer 2:

我的猜测是,一些奇怪的是在部署发生,所以PDB不与实际的代码同步。 如果您使用的记录,而不是调试器的工作发生了什么事情,我怀疑你会看到更明智的行为。 我怀疑它的本身的“如果”古怪行为的CLR - 它更可能是一个调试器/运行时间不一致。



Answer 3:

我已经看到了类似的情况下,在很久以前,在德尔福,所以我的问题是这样的:你编译的版本或调试,有或没有优化?

我问的原因是,有一次,在调试会话期间,我发现,由4-5行代码,根据调试器,出现了相反的被执行的小程序。

基本上,具有以下类型的代码:

procedure Test;
begin
    Line1;
    Line2;
    Line3;
    line4;
end;

的执行顺序,根据调试器,是这样的:

procedure Test;
begin             start -+
    Line1;               |                             +-> here -+
    Line2;               |                   +-> here -+         |
    Line3;               |         +-> here -+                   |
    line4;               +-> here -+                             |
end;                                                             +-> end

其原因是,该线是无副作用在它们之间,所以编译器通过改写它,实际上重新排列码出现在反向充分执行“优化”的代码。

所以,你有一个throw语句进一步下跌,实际上是得到执行的一个,但是编译器显示这是你有问题的人,因为,由于重新排列码,双掷语句实际上只发出一次为可执行码?

:我没有任何理由要知道,这是Visual Studio是干什么的,但是这是看到你的视频是什么时候来到我的脑海里。



Answer 4:

我想,这看起来像,其中调试步进范围只是断开的情况。 你不能总是相信在调试器中的黄色亮点。 您实际上并不插手。在F#的早期Beta版本,我们有很多这样的错误的,当黄色的亮点会跳来跳去像疯了似的。 调试器高亮大多是在任何的编译器写入.pdb文件为对应于一个特定的编译的指令集“源范围”的摆布。

什么版本的VS / C#这是什么?

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



Answer 5:

我有完全相同的问题星期前。 也有VS2008,最新的SP。 WinForms应用程序。 该值是假的,但if总是执行机构。 我在做同样的调查,因为在你的视频。 这里是我的代码:

 if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion))
     throw new SimulationFormatException(ws, ss);

运行没有调试器编译为“释放”是罚款。 试试吧。

我想有在VS2008调试器中的错误。 不知怎的,重现性好“如果”和“扔”的关键字。

编辑:在“执行”上述字是错的过程之一。 “临危受命,但不执行”必须被替代。



Answer 6:

只要添加一个“我也是”这里的代码高亮时髦。 我正在用C#VS2008。 我有一个Windows窗体项目引用另一个项目一个类库,我都调试一行行。 “在某些点”在调试黄色亮点是从14至20线断开从正被执行的实际线路的任何地方。

我关闭VS,打开目录的两个项目,两个目录中删除一切从斌/调试和OBJ / Debug,然后重新启动VS. 在编译和调试通过步进,一切都很好再次。

我不知道这个问题是在一个.manifest的,.PDB,或者一个.Cache文件。 不要紧 吹嗯一切都抛弃,它会被罚款。

FWIW,谷歌搜索,不同的是它返回这个SO线程几乎无用。 所有其他的打击是关于用VC ++模板和VS2005,其中SP定这个问题问题。 这是不一样的问题。



文章来源: If statement weirdness in Visual Studio 2008
标签: c# .net runtime