2009-06-01 150 views
1

我正在調試Visual Studio 2005中的一個大型項目的一部分,並逐行逐句通過代碼。作業失敗

int speed = this->values.speed; 
int ref = this->values.ref_speed; 

步進過去的第一行之後,values.speed具有61的值,但由於某些原因,速度是越來越分配值58的第二行之後,values.ref_speed具有58的值,但引用被分配值30.

暫停時,您可以看到原始值實際上分別是61和58,但獲取的值是不同的。

是什麼導致了這種行爲?

+2

它是一個多線程應用程序嗎? – Robert 2009-06-01 19:28:45

+0

如何發佈一些值的代碼? – JeffH 2009-06-01 19:29:26

+0

是的。但是,該特定位置只能寫入一次。 – 2009-06-01 19:29:57

回答

6

如果值結構的定義在頭文件中發生了更改並且沒有重新編譯所有對象文件,則可能會發生這種情況。然後,此文件中代碼結構的「映射」可能與代碼的其餘部分不匹配。這可以解釋爲什麼其中一個變量似乎具有其他的價值。

或者Visual Studio .pdb文件由於某種原因沒有得到更新,並且Visual Studio正在尋找變量的舊地方。

0

你是在調試還是釋放模式下這樣做?如果你在發佈模式下或者在優化模式下進行,編譯器可能會重新排序以獲得更好的性能,這可能導致奇怪的結果。這並不意味着在實際執行過程中出現任何錯誤,但可能會讓人困惑。

+0

這發生在調試模式下。 – 2009-06-01 19:32:44

1

瘋了。任何機會你有一個局部變量相同的類型this->值的名稱也是值(這將解釋爲什麼你通過this->引用成員)?