Visual Studio 中好用的除錯技巧與快捷鍵

我們都知道按下 F5 可以啟動或繼續除錯的動作, 但你或許不知道按下 Shift-F5 (Stop Debugging) 可以停止除錯, 並且立即回到設計畫面。此外, 按下 Ctrl-Shift-F5 (Restart) 可以重新啟動除錯, 這在我們修改程式碼之後的繼續除錯很有幫助...

Visual Studio 是一個成熟而且方便好用的開發環境, 我個人使用它來開發程式雖然已經有段不算短的時間, 但我愈是使用它, 我愈能體會這個工具所能帶給程式設計師的便利。當然, 它並非完美無暇 (其實我還打算開個專文來討論我對這套工具的不滿和建議), 可是如果和我最早時期使用 Notepad 來撰寫程式的階段比較起來, 我真的要感謝微軟的工程師能設計出這麼好的工具讓大家使用。

 

不過或許正因為我一開始是使用 Notepad 來開發程式, Visual Studio 裡面仍然有許多好用的功能, 坦白說, 我並沒有真正花時間去研究, 也沒有深刻的印在心裡。因此, 即便許多書本上都已經寫過類似的主題, 我還是要在這裡把我個人認為有助於提升生產力的功能列出來, 也順便留作隨時可以翻閱的參考。

除錯的輔助功能


我們都知道按下 F5 可以啟動或繼續除錯的動作, 但你或許不知道按下 Shift-F5 (Stop Debugging) 可以停止除錯, 並且立即回到設計畫面。此外, 按下 Ctrl-Shift-F5 (Restart) 可以重新啟動除錯, 這在我們修改程式碼之後的繼續除錯很有幫助。

在設定程式的中斷點之後, 我們可以按下 F10 或 F11 以逐步執行的方式來觀察每一行程式的執行結果。其中 F10 和 F11 都是讓你一行一行的往下執行, 其差異在於按下 F10 時, 畫面並不會切換到中斷行所呼叫的函式。例如你的程式中有一個方法叫做 protected int calc(int a, int b), 如果中斷點執行到這個方法時, 例如 int result = calc(100, 200); 此時如果按下 F10 (Step Over), 畫面只會繼續進行到該行的下一行 (這時候你可以把滑鼠游標移到 result 這個變數上面, 就可以看到 calc() 方法所傳回的結果); 但是如果剛才你按的是 F11 (Step Into) 而不是 F10, 那麼畫面會跳進 calc() 方法裡面, 那麼會變成你是在檢查 calc() 方法中的程式了。

在這個情況下, 如果你剛才按的是 F11, 畫面切入 calc() 方法, 而偏偏 calc() 方法又臭又長, 但你卻已經不想在 calc() 方法中浪費時間了, 怎麼辦? 很簡單, 你可以立刻按下 Shift-F11 (Step Out), 它會讓你直接從目前的函式中跳回上一層, 然後再繼續。

我個人覺得上面所提的三個按鍵幾乎已經是我日常工作中對於除錯功能的全部需求了。不過我的一位同事很喜歡使用 Watch 功能; 如果你有需要同時監看多個變數, 或許你也可以參考他的習慣做法。方法很簡單, 你可以在除錯階段中, 在變數上面按下滑鼠右鍵, 再選擇 Add Watch, 之後這個變數就會在監看視窗中列出來, 供你在逐步除錯時快速監看各個變數的變化值。不過這個功能有個缺點, 就是你時常需要以手動方式把 Watch 刪除, 否則監看視窗很快就會擠滿一大堆東西。

此外, 我個人蠻喜歡逐步執行和「繼續」混合運用的除錯方式。由於你可以很自由的在除錯時期加入和取消中斷點, 所以你可以視情況在適當的地方加入新的中斷點, 然後按下 F5 (Continue), 讓程式直接執行到新中斷點所在。你也可以在程式迴圈裡的適當地點加入中斷點, 然後按下 F5, 那麼程式會立即執行到迴圈的下一個回合。等你檢查得差不多的時候, 把迴圈內的中斷點取消, 再設定其它的中斷點, 再按下 F5, 程式又會執行到其它地方 (當然, 你也可以按下滑鼠右鍵, 再選擇「執行到游標處」; 看哪一種適合你的情況)。

撰寫程式的小技巧


其實有些按巧我已經寫在其它文章裡了, 不過在這裡我再重複提一次。

首先我要提的是方塊狀的文字選取方式。按著 Alt-<滑鼠左鍵> 不放並移動滑鼠, 就可以以方塊狀的方式選取文字。我不曉得你能不能了解所謂的「方塊狀」指的是什麼... 如果你不清楚, 那麼你可以打開 Visual Studio 親自操作一遍, 馬上就清楚了。不過, 方塊狀方式選取文字有什麼用呢? 其實在大部份時候, 這個功能是沒有用處的, 但是在一些特殊的狀況中, 你會感謝有這個功能存在 (例如需要把一大串文字前面的行號拿掉的時候)。

像這類功能在 DOS 時代的 PE2 (我想現在已經沒有多少人記得這東西了) 是最強大的, 但沒想到 Visual Studio 還保留這個小功能, 倒是令人有點意外。

此外, 你可以在程式設計頁面中, 試著將常用的程式片段往你的工具箱拉。大家都知道在程式設計頁面中, 工具箱裡面通通是空的, 但是如果你把一段文字拖拉到這裡, 這段文字就會被永遠記錄在這裡供你差遣。在工具箱裡, 你是可以自由加入索引標籤的, 所以你可以建立多個索引標籤, 然後把不同的程式片段往裡面丟 (記得把每個程式片段的名字改成有意義的名稱), 未來在需要的時候就可以從工具箱裡拉出來使用了。妥善使用這個功能, 它可以取代麻煩的  Code Snippets。

另外, 我們在撰寫程式時可以使用 Ctrl-PgUpCtrl-PgDn 快速的將游標移動到當頁的最上方和最下方 (不換頁)。如果游標焦點是位在 Docked Window (例如 Solution Explorer 或 Ouput 等), 使用 Ctrl_PgUp 和 Ctrl-PgDn 則是可以切換頁籤; 你可以自己試試。

還有一個好用的小技巧, 應該已經有很多人都很清楚了。那就是在原始程式畫面中, 只要按住 Ctrl 鍵, 再按上下鍵, 就可以全畫面捲動, 卻不會移動文字游標。這個功能很簡單, 但其實非常好用。

此外, 按下 Ctrl-Tab 可以在已開啟的各視窗之間快速進行切換 (還可以順便看到各視窗的縮圖)。這是一個很實用的技巧。

 


Dev 2Share @ 點部落