TechEd2008- .NET 應用程式除錯秘技系列(1) - 在VS2008中對.NET Framework source code進行除錯

終於順利講完今年的TechEd, 在課程結束後,有人上講台詢問了相關的問題,其中最多人問到的是 - 在這個場次講到的工具都是公開的嗎? 感覺以前沒有人講過類似的議題..... 是的~除了Visual Studio是需要付費購買的以外,其他介紹到的工具都是可以免費下載的。至於跟debugging 相關的教學資源,在國內的確很少,而即使在國外,也沒有系統化的教材,相關的資源的確比較分散。

 

主要是因為我認為debugging 並不是一門顯學,進入的門檻也比較高,而真正使用到的場合則是因人而異。如果應用程式是自行開發,對source code有非常深入的了解,則在除錯時可能只要靠log檔或錯誤訊息就能解決大部份的問題了。 但對於我們技術支援的角色而言,常常是拿不到客戶的source code的(就算客戶願意給,可能整個source project review下來~其他case也不用做了)。所以debugging 對我們來講是很重要的技能。

 

在進入微軟之前,我對memory dump也一無所悉,而在我們的內部訓練當中,也只針對基本的除錯有相關的訓練。這是因為問題的類型千變萬化,工具的熟練對除錯的幫助並不大,必須靠著紥實的基本概念及除錯的經驗,才能逐步的踏向除錯達人之路。

 

出來混總是要還的,在講這個課程的時候,答應大家會將裏頭的內容全部分享出來,並且對用到的相關指令及操作做一個較為完整的介紹,因此我會針對課堂中所講到的5個sample,外加原本有準備但被刪掉的3個sample做一系列的說明。 以下是我在做這些sample時所用的設備及環境說明:

 

1. CPU - Intel Petium M 1.73G

2. RAM - 2GB

3. HDD - 250GB

4. OS - Windows Vista Enterprise Edition with SP1

5. Visual Studio 2008 Team System RTM version

6. Debugging Tools for Windows (Windbg) 6.9.0003.11

 

首先介紹到的是,如何在Visual Studio 中debug .NET Framework Souce code,點我下載source code

2張圖片說明相關的設定(投影片也有,可以在颱風退散~還我TechEd 2008文章裏下載)

 

1. Tools => Options => Debugging => General

014

2. Tools => Options => Debugging => Symbols

015

在設定好之後,我們透過範例中很簡單的一段程式來進行測試。我們在Windows Form上佈了一個button, 並用以下程式做為button_click的處理

   private void button1_Click(object sender, EventArgs e)
         {
             foreach (string d in Directory.GetDirectories("c:\\"))
             {
                 this.textBox1.Text += d + "\r\n";
             }
         }

當我們在foreach 迴圈設定斷點後,按下F11進行單步偵錯(Step-in),VS 就會幫我們下載有用到的source code,並且可以針對.NET Framework 的source code進行除錯,如下圖所示:

016

雖然我們使用Directory.GetDirectories方法時只傳入一個參數(path),從上圖可以看到,它會自動呼叫其他overload的方法。

 

以上的設定方式可以讓VS2008連到source server 將source code及symbol (.pdb) 下載下來,但可不可以將所有的source code一次下載下來呢?

這樣講當然是有囉~ 在codeplex上有兩個牛人寫了一支程式可以將所有版本的source code都完整的下載下來,在CodeProject也有一篇專文介紹如何在VS 2005及VS 2008 Expression Edition進行相關的設定,請參考:

NetMassDownloader Download .Net Framework Source Code At Once Without Any Visual Studio Installed , Enables Offline Debug In VS 2008,VS2008 Express Edition,2005 And CodeGear Rad Studio.

 

另外針對可編譯的.NET Framework,有一個稱為Rotor的計劃(又稱為SSCLI),各位可以至Microsoft Download下載,這是一個可編譯的版本,包含C#的compile也在裏頭,若您要自行編譯,其系統需求如下:

System Requirements
  • Supported Operating Systems: Windows XP Service Pack 2

On Windows you will need:

由於裏頭有部份的source code是用ANSI字元存檔,因此在中文的作業系統要進行編譯時可能會發生問題,這裏有相關的解答。