2015年4月22日 星期三

【Visual Studio】Visual Studio 除錯

摘錄一些自己覺得有用的除錯技巧。
target version:VS 2013 Community(ENG)、VS 2013 Ultimate(ch-tw)、VS 2010 Ultimate


最基本的加入斷點(BreakPoint)
在紅框處左鍵,或游標放在你要偵錯的那一行然後按 F9
按 F5 執行(除錯模式),當程式執行到該行的時候就會停下來。
此時你就可以觀察運行中的程式狀態,一般我們觀察的重點是變數

左下角的小視窗組是 Debugger Variable Windows
  1. Autos:檢視目前行 + 上一行的變數狀態。
  2. Local:目前方法中的所有變數狀態。
  3. Watch:指定的變數狀態。
ex. Autos
ex. Locals
至於 Watch 是檢視由我們指定的變數狀態
反白變數或敘述式後滑鼠右鍵,選加入監看式(此操作須先進入除錯模式)

目標物也可以是多層集合或函式呼叫
不過有個小缺點就是預設不會自己更新狀態,要去按右邊小小的重整鈕
不過你可以在 Name 欄雙擊進入編輯後,加上 ,ac ,後 enter,如此它就會自動更新狀態了。
如果你只是突然想看特定的值,你也可以反白後按 Shift + F9 快速查詢
如果你覺得要在 Variable Windows 裡面找很麻煩,我只想知道目前運作方法中特定的變數或屬性值,你也可以直接游標移到變數上,IDE 即會出現提示,若為集合或物件還可以展開觀察元素或屬性。


每看完一個斷點,我們可以使用 F5、F10 或 F11 繼續程式的逐步執行
  1. F5:執行到下一個斷點
  2. F10:逐行執行但不進入碰到的函式
  3. F11:逐行執行且進入碰到的函式
  4. Ctrl + F10:執行到游標位置

ex. F11 碰到函式Func會進入(假如該看的看完了,可以Shift + F11跳出函式)
ex. F10 執行但不進入碰到的函式
ex.F5 直接一路執行到下個斷點(以本例來說就是直接一口氣跑完到 Console.Read())

逐行操作搭配 Variable Windows 一般我們可以輕易地了解發生錯誤當下程式的狀態
承上,除了執行時期的錯誤之外,我們往往更常需要面對設計邏輯上的錯誤;例如我們將 ary 中的 null 換成 空字串,在執行時期就不會收到 exception,但是空字串作為參數的話輸入的話常常是沒有意義的,或者會引發後續程式的錯誤。

如果這個空字串引發了非預期的邏輯錯誤,當然在本例中我們可以用 F5 在迴圈中一個一個去檢查,但是若是這個陣列包含數千甚至數萬個元素呢?

在知道邏輯問題條件的前提下,我們可以在斷點右鍵進行條件設定,如此就只會在符合條件時程式才會進入斷點。



右下角的視窗除了 BreakPoints 之外,我比較常用的是 CallStack,它可以追蹤你是透過那些函式一路從進入點到達目前方法的。
以上就是我個人比較常用到的除錯功能。


15/6/7 使用 Visualizer 
把游標移到變數上,若它是 Visualizer 有支援的類型就會出現小放大鏡,按它

就會出現這樣的快速預覽了!

有些無法(或不方便)用游標快速檢視的東西,也可以用 shift + F9 快速監看中提供的視覺化檢視來觀看(或 copy)。 例如以下是一個經過許多拼湊的 StringBuilder 其中的內容為一連串的 SQL command。



題外話,PICASA 莫名的吃掉了我之前作的很多範例圖,所以這篇有三個不同版本的 IDE 的內容,中英文就自己翻譯一下吧...

15/10/15 偵錯時包含 try catch 中的內容
今天被叫去看之前寫的 Excel 匯入的問題,但在改寫的過程中我完全沒有發現,因為該問區域被 try catch 的好好的,所以只有那部分錯的時候匯入結果看起都還是正常,引起我好奇的是既然結果看起來是正常的,頭兒是怎麼知道那裏有個 Exception?



如此一來就會偵錯到 try catch 包裹的內容了
不過這個部分因為同時也會偵錯到其他拉里拉雜的東西,所以在如果懶得調裡面的細項的話,用在出門前的最後幾道細部檢查再開即可。

2016/04/22 暫停鈕
今天程式初始化踩進某個無窮迴圈裡,外觀看不出什麼問題(就卡住),也沒噴錯,無奈去問老大,他:「你不會按暫停不就知道卡在哪了嗎? 」(以下為示意圖)
我以前還真是從沒用過這東西,又上了一課。


沒有留言:

張貼留言