我碰到过这么奇怪的问题,那我录我的会议,因为我不认为任何人会相信的我。
我碰到这似乎是在非常基础的层面的错误。 这是一个单线程的应用程序,所有IM做的是评估一个布尔值。
布尔等于假,但是,如果语句执行,就好像它是真实的......之类的。 你会明白我的意思。 我已经清理解决方案,并多次重修。 不知道怎么回事。
我喜欢一些解释吧。
http://www.youtube.com/watch?v=ope9kxEyt4g
我碰到过这么奇怪的问题,那我录我的会议,因为我不认为任何人会相信的我。
我碰到这似乎是在非常基础的层面的错误。 这是一个单线程的应用程序,所有IM做的是评估一个布尔值。
布尔等于假,但是,如果语句执行,就好像它是真实的......之类的。 你会明白我的意思。 我已经清理解决方案,并多次重修。 不知道怎么回事。
我喜欢一些解释吧。
http://www.youtube.com/watch?v=ope9kxEyt4g
我见过很多次了过去。 基本上是什么情况是,你正在调试的代码不符合您所看到的代码。
我不知道是什么原因导致这和解决方案如下货物邪教的准则。
我的猜测是,一些奇怪的是在部署发生,所以PDB不与实际的代码同步。 如果您使用的记录,而不是调试器的工作发生了什么事情,我怀疑你会看到更明智的行为。 我怀疑它的本身的“如果”古怪行为的CLR - 它更可能是一个调试器/运行时间不一致。
我已经看到了类似的情况下,在很久以前,在德尔福,所以我的问题是这样的:你编译的版本或调试,有或没有优化?
我问的原因是,有一次,在调试会话期间,我发现,由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是干什么的,但是这是看到你的视频是什么时候来到我的脑海里。
我想,这看起来像,其中调试步进范围只是断开的情况。 你不能总是相信在调试器中的黄色亮点。 您实际上并不插手。在F#的早期Beta版本,我们有很多这样的错误的,当黄色的亮点会跳来跳去像疯了似的。 调试器高亮大多是在任何的编译器写入.pdb文件为对应于一个特定的编译的指令集“源范围”的摆布。
什么版本的VS / C#这是什么?
编辑在看到别人的答案,确实是一个可能的原因是,你的.pdb文件是与您的.dll文件同步。
我有完全相同的问题星期前。 也有VS2008,最新的SP。 WinForms应用程序。 该值是假的,但if
总是执行机构。 我在做同样的调查,因为在你的视频。 这里是我的代码:
if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion))
throw new SimulationFormatException(ws, ss);
运行没有调试器编译为“释放”是罚款。 试试吧。
我想有在VS2008调试器中的错误。 不知怎的,重现性好“如果”和“扔”的关键字。
编辑:在“执行”上述字是错的过程之一。 “临危受命,但不执行”必须被替代。
只要添加一个“我也是”这里的代码高亮时髦。 我正在用C#VS2008。 我有一个Windows窗体项目引用另一个项目一个类库,我都调试一行行。 “在某些点”在调试黄色亮点是从14至20线断开从正被执行的实际线路的任何地方。
我关闭VS,打开目录的两个项目,两个目录中删除一切从斌/调试和OBJ / Debug,然后重新启动VS. 在编译和调试通过步进,一切都很好再次。
我不知道这个问题是在一个.manifest的,.PDB,或者一个.Cache文件。 不要紧 吹嗯一切都抛弃,它会被罚款。
FWIW,谷歌搜索,不同的是它返回这个SO线程几乎无用。 所有其他的打击是关于用VC ++模板和VS2005,其中SP定这个问题问题。 这是不一样的问题。