2014-04-01 80 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