標籤:
我們在追蹤bug的時候也往往需要追蹤到.net framework的源碼中去,微軟將.NET的源碼部分開源後我們終於有了這個機會,我的編譯環境是VS 2010RC,記錄一下如何單步調試到.NET的源碼中,怕自己忘記,同時也分享給大家。
1、工具- 選型 – 調試 - 常規,按照修改我框起來的地方:
2、工具- 選項 – 調試 - 符號,按照進行配置:
這裡注意你只需要在位置裡添加http://referencesource.microsoft.com/symbols這一項即可,後面是在編譯過程中自己產生的,然後將符號緩衝路徑改為你希望放置的地方,在這裡我的路徑是D:\development\NetMassDownloader\src(我使用NetMassDonloader沒有成功,總是搜尋到可供下載的PDB檔案為0,我使用的NetMassDownloader的版本為1.6.0.0,按照發布說明已經支援VS 10.0了,如果有誰知道怎麼解決請告訴我一下),注意對此路徑一定要有讀寫權限,最後勾選“除排除模組之外的所有模組”。
然後建立一個WPF的工程,我只是在介面上加了一個按鈕,簡單實現了一個按鈕事件:
[csharp] view plaincopyprint?
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- MessageBox.Show("hello word");
- }
在MessageBox.Show("hello word")上設定斷點,運行之後在呼叫堆疊上就可以觀察到調用過程:
右鍵點擊非灰色的可以發現可以查看原始碼:
F11逐步執行的時候可以發現以前不能查看的代碼這時也可以跟深層地追蹤原始碼:
灰色部分右鍵點擊之後發現”轉到原始碼“不可用,這時在載入符號中選擇,就可以查看原始碼,期間會有下載相應PDB的過程:
至於載入資訊顯示如下:
如所示我在編譯以前別的VS平台編譯過的工程(經過轉換)無法使用轉到原始碼,載入資訊同樣如上所示,我當時以為是前兩項沒有找到PDB的緣故。當我建立一個工程編譯一次後,除了建立的這個工程可以使用轉到原始碼,原本以前平台編譯過原本不能使用“轉到原始碼”功能的工程也同樣可以使用此功能了,看來上面的載入資訊與能否使用調試源碼沒有必然聯絡,在這裡希望達人解答一下上面的含義。
最後MS並沒有將全部的原始碼都開源,所以有時在使用時會有“沒有可用的資源”的提示,這時如果還要查看源碼的話可以按照堆棧的層次用Reflector直接查看源碼。
VS2010下調試.NET源碼