2014-04-01 41 views
2

我有以下代码:如果语句行为奇怪

var test = _myDictionary.ContainsKey(myKey); 
if (!test) 
{ 
     Logger.Error("My log message"); 
     throw new ApplicationException("My exception message"); 
} 

本词典收录的关键。在调试时的testtrue

会发生什么事,是代码直接跳转到throw声明,跳过调用Logger,而它确实不应该这样做既不 - 它应该只是跳过整个块继续执行。

我已经完全从存储库中取代了源代码,我已经清理并重建了许多次,但无济于事。

然而,当我改变了我的代码

if (test) 
{ 
    // my code 
} 
else 
{ 
     Logger.Error("My log message"); 
     throw new ApplicationException("My exception message"); 
} 

一切正常。

任何想法可能会发生在这里?它的工作原理与现在一样,但我不会轻易放松,除非我知道这可能是什么原因。

UPDATE:我删除了我的.suo文件和输出文件夹中的一些二进制文件,即使我清理了解决方案也没有删除它们。在此之后,它似乎工作正常

+5

听起来调试器附加到旧版本的代码。试图重新启动机器? – CodingIntrigue

+4

@PatrickHofman我假设你在开玩笑 –

+1

除非你提供一个简短但完整的样本来重现问题,否则这些问题是无法回答的。 –

回答

6

当程序集和它的PDB不同步时,有时会发生这种情况。在调试时,调试器实际上是从PDB文件中读取相关信息,而不是直接从源文件中读取。

您应该尝试重建项目(或手动清理然后构建),然后重试。

编辑我误读了你的问题,你说你已经试过重建。在这种情况下,调试过程中,去调试→视窗→模块窗口,并确保在加载符号文件,其实是正确的(例如,在同一bin\Debug位置加载):

+0

它正在加载最新的PDB,因为这发生在单元测试会话中。我删除了磁盘上的所有测试会话以确保。我重新启动了计算机,从而重新启动了Visual Studio。当我恢复了首先使事情发挥作用的更改时,错误重新发生。所以我很确定代码是在更新的代码上运行的 – havardhu