﻿# 在 Visual Studio 2010 如何逐步執行偵錯 .NET 核心原始碼

微軟有個 [Microsoft Symbol Server](http://support.microsoft.com/kb/311503/en-us) 可讓你在開發的過程中提供你所有 .NET Framework 組件的偵錯資訊 (symbol debugging information)，我之前也[有文章](/post/2008/08/30/dot-NET-Framework-35-SP1-Sources-are-available)介紹過如何在 Visual Studio 2008 設定，到了 Visual Studio 2010 設定變的更簡單些，支援的組件也更多，包括 .NET 2.0, 3.0, 3.5, 4.0 BCL, MVC1.0, 2.0，甚至於你可以從 SymbolSource.org 設定更多的符號檔 (\*.pdb) 位置。

### 啟用 .NET Framework 原始碼逐步偵錯功能

1\. 開啟 Visual Studio 2010 RTM 並點擊選單 \[工具\] / \[選項\] –> \[偵錯\] / \[一般\]，並勾選 \[啟用 .NET Framework 來源步進\]  ( 註: 這翻譯實在太糟糕了，建議: **啟用 .NET Framework 原始碼逐步偵錯** )

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8ed9e9898b8b635e852b-image_thumb.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2387ff93d635c21751bc-image.png)

按下 \[確定\] 後，會出現一個提醒視窗告知會停用 Just My Code 的設定：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6f50c9ff5e3c6df68fd6-image.png)

以及以下提示： ( 都是中文字，請各位務必要看 )

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ac7053f153656c327b90-image.png)

2\. 請勾選 \[Microsoft 符號伺服器\]，另外，如果 C 磁碟機不夠大，建議更換預設「快取此目錄中的符號」的儲存路徑：

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fa7772f8d440f58541de-image_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b3d501cdd79d9e9adbfa-image.png)

按下 \[確定\] 後，就會開始從 **Microsoft Symbol Server** 開始下載 **符號檔**(\*.pdb)，可能會花一些時間下載，這要看你的網路速度如何。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9d74065be25f7cc4babf-image.png)

就這樣兩個步驟即可設定完成。

### 執行逐步偵錯的方式

1\. 先在專案中設定中斷點並按下 F5 開始偵錯，如果有組件符號檔尚未下載，這時會花些時間下載，但只會下載一次而已

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ae7679ddf0f208535ae0-image.png)

2\. 接著開啟 **呼叫堆疊**(**Call Stack**) 視窗，並在你想要檢視的地方 **雙擊滑鼠**(**Double Click**)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0a1d1e6f67f98f49fa8d-image.png)

第一次點選的時候，它會出現 End User License Aggreement 請看完並按下 Accept 按鈕

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e5a276be430929600859-image.png)

只是每次開啟後都會出現以下錯誤（每次都會），有點惱人：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fa46059e6bd9b4421f9e-image.png)

這是因為所有原始碼檔最後面多了一個奇怪的字元，不知為何加上去的：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0d949c3bbde3ad6b0d37-image.png)

最後，你就可以看到完整的 .NET Framework 原始碼了！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/508c25f0d1969ab2e7c4-image.png)

但並非所有組件都有提供參考用的原始碼，如果你選到這些類別就會出現以下「沒有可用來源」的畫面：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ad9d72de3f3bd80a816e-image.png) 

**相關連結**

-   [.NET Framework 3.5 SP1 原始碼已開放參考檢視](/post/2008/08/30/dot-NET-Framework-35-SP1-Sources-are-available)
-   [Setting up Visual Studio 2010 to step into Microsoft .NET Source Code](https://web.archive.org/web/20100425234142/http://weblogs.asp.net/rajbk/archive/2010/04/21/setting-up-visual-studio-2010-to-step-into-microsoft-net-source-code.aspx)
-   SymbolSource.org - Your source for debugging symbols... and sources
-   [Use the Microsoft Symbol Server to obtain debug symbol files](http://support.microsoft.com/kb/311503/en-us)
