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
2. Tools => Options => Debugging => Symbols
在設定好之後,我們透過範例中很簡單的一段程式來進行測試。我們在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進行除錯,如下圖所示:
雖然我們使用Directory.GetDirectories方法時只傳入一個參數(path),從上圖可以看到,它會自動呼叫其他overload的方法。
以上的設定方式可以讓VS2008連到source server 將source code及symbol (.pdb) 下載下來,但可不可以將所有的source code一次下載下來呢?
這樣講當然是有囉~ 在codeplex上有兩個牛人寫了一支程式可以將所有版本的source code都完整的下載下來,在CodeProject也有一篇專文介紹如何在VS 2005及VS 2008 Expression Edition進行相關的設定,請參考:
另外針對可編譯的.NET Framework,有一個稱為Rotor的計劃(又稱為SSCLI),各位可以至Microsoft Download下載,這是一個可編譯的版本,包含C#的compile也在裏頭,若您要自行編譯,其系統需求如下:
System Requirements
- Supported Operating Systems: Windows XP Service Pack 2
On Windows you will need:
- Windows XP SP2.
- Microsoft Visual Studio .NET 2005.
- Perl 5.8.7 (available from https://aspn.activestate.com/ASPN/Downloads/ActivePerl/.)
- Archiving utility of choice—WinZip or other.
- 256 MB of memory.
- One gigabyte of free disk space.
由於裏頭有部份的source code是用ANSI字元存檔,因此在中文的作業系統要進行編譯時可能會發生問題,這裏有相關的解答。
Comments
- Anonymous
November 11, 2008
故事是這樣的~ 我建立了一個簡單到不行的web 專案, 裏頭只有一個sitemap設定及default page. 在default page中放了一個TreeView控制項。並且將TreeView的DataSource指定為SiteMapDataSource,結果當我要看設計畫面時,一個錯誤噴出了!!