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