OzCode - 最強大的 Visual Studio 偵錯套件
我們都知道Visual Studio是地表最強的開發工具,其中與開發人員最相關的二個功能是開發時的IntelliSense與除錯用的IntelliTrace,IntelliTrace雖然強大好用,但是要Ultimate版才有完善支援,當然,那是一筆不小的費用。那麼除了升級為Ultimate版本外,是否還有其他好的選擇?是的,OzCode就是一套筆者要介紹給各位的Visual Studio Debug擴充程式。
OzCode
好的除錯工具帶你上天堂。OzCode是一套可以解決除錯上煩腦的強大套件。
OzCode正在舉辦一個除錯測試,參加者有機會贏得一套OzCode授權,以下範例以除錯測試中的範例來示範,讓各位讀者看看使用OzCode的前後差異。
OzCode Challenge
第一題
void Main() { bool flag = true; StringBuilder sb = new StringBuilder(); sb.Append("foo " + flag == false + " Bar"); Console.WriteLine (sb.ToString()); }
在LINQPad執行結果是,但是why?
我們看看在Visual Studio下使用IntelliTrace的結果:
雖然對於變數內容的變化,我們可以很容易的透過區域變數視窗來觀察,但對於運算式的運算過程IntelliTrace就比較幫不上忙。我們還是只知道結果是false
,但為何是false
還是有看沒有懂。
第二題
void Main() { var riddle = new Riddle(); ((Counter)riddle.counter).Increment(); Console.WriteLine (((Counter)riddle.counter).Count); } // Define other methods and classes here struct Counter { private int x; public void Increment() { this.x++; } public int Count { get { return this.x; } } } class Riddle { public readonly object counter = new Counter(); }
執行結果為,但為什麼為是0呢?
第三題
void Main() { bool boolean1 = true; bool boolean2 = true; bool boolean3 = false; if (boolean1 = boolean2 && boolean3) Console.WriteLine ("true"); else Console.WriteLine ("false"); }
執行結果為。
傳統偵錯的問題
從上述的幾個情境上我們可以看到,中斷點也好,IntelliTrace也罷,都沒能幫上太大的忙,原因是Visual Studio裡的偵錯模式注重在最後的執行結果,也就是每一行執行後的結果,然後開發人員再檢查執行結果是否有誤來判斷問題。
但在除錯進行的過程式常常是這樣:「明明結果不對,但就是找不出來程式那邊的邏輯寫錯。」如同上面的範例,結果就是和你想的不一樣,那要怎麼除錯呢?
OzCode的強大功能就在這裡,它注重執行過程的偵錯訊息,並提供可視覺化的偵錯訊息。
使用OzCode偵錯
執行至中斷點後請按F10,才會有以下說明的效果。
第一題,透過OzCode的Simplify功能,我們能很快發現,這是個操作優先順序的問題,運算式會是這樣運算:(("Foo" + flag) == (false + "Bar"))
。
第二題,可以透過OzCode的Show All Instances來觀察執行個執個體目前在記憶體中的狀態。這樣就能觀察到執行個體在記憶體中的boxing與boxed的狀態。
第三題,透過OzCode的Simplify功能,可以瞭解運算式「&&」有較高優先順序並先執行運算。
第一题一看就是false啊。等号左边以foo开头,等号右边以false开头,当然不一样啊,还需要侦错呀。。
回覆刪除gqq nbig, 這一看就知道是要舉例用的,文章也不會閱讀重點。雞蛋裡挑骨頭不會顯得你有多厲害,做這種大家都知道的評論只會覺得你來亂的。
回覆刪除