Monday, June 16, 2008 - 文章

Visual Studio: 詭異的即時監看結果

同事反應給我的問題,程式裡有段寫法if (r["F"] == "Y")的判別結果很怪,Line by Line Debug時,r["F"]的內容是"Y"沒錯,用Command Window檢查或監看(r["F"] == "Y")的結果是true,但實際的流程卻跑到false的分支。

首先要聲明,r["F"] == "Y"的寫法是有問題的。Visual Studio.NET 2003會提出警告,指出不應該將object與string直接相比。但是有趣的地方在於,實際流程中的二者比對結果是不相等,但即時運算視窗檢測卻二者相等。

我本來怪罪這是VS.NET 2003的老Bug,於是寫了一小段程式做實驗,卻發現更好玩的狀況。下圖是在VS.NET 2003的測試結果,我使用Watch監看r["F"]=="Y"跟在程式中比對(r["Y"]=="Y")後存入Boolean的變數b,二者的結果都是true。與我同事程式中為false,監看為true的狀況不同。

同樣的程式搬到VS2008(後來再測試VS2005的結果與VS2008相同),結果大異其趣。監看r["F"]=="Y"為false, 程式中的比對結果則為true,跟同事程式中的結果剛好相反。

感覺上是Visual Studio在除錯模式下判定比對結果的邏輯與實際Runtime不同所致,但VS2003, VS2005, VS2008, 實際程式與測試Code的結果理不出頭緒。

我把用VS2008 Submit a Bug功能把這問題反應給MS,當天得到回覆說已將問題轉交RD研究。如果有進一步消息,再報給大家知。

Posted 16 June 2008 02:59 PMJeffrey | 5 comment(s)
Filed under:

搜尋

Go

<June 2008>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication