【.NET】Visual Studio 2005/2008で.NET Frameworkのソースを見ながらステップ実行する
.NET Frameworkのソースコードは、Microsoftが正規に公開しており、Visual Studioのデバッガ上でソースを見ながらステップ実行することができます。
最新のIDEであるVisual Studio 2008のStandard以上のエディションには、サーバーから自動でソースコードをダウンロードし、デバッガ上で表示する機能があります。
Visual Studioの設定をするだけで、デバッガのステップ実行で .NET Frameworkの内部まで入っていくことができます。
また、Visual Studio 2005や、Visual Studio 2008のExpress Edition(無償版)でも、NET Frameworkのソースコードをあらかじめローカルのディスク上にダウンロードしておくことにより、同様のことが可能です。
(2008 Standard以上を持っている場合でも、ローカルに保存しておくとストレスなく実行できて便利です。)
以下に詳細を書きます。
Visual Studio 2008 Standard Editon以上の場合
Visual Studioのメニューバーから【ツール】-【オプション】を開きます。
【デバッグ】-【全般】を選びます。
「`マイ コードのみ`設定を有効にする」のチェックを外します。
「ソース サーバー サポートを有効にする」のチェックを入れます。
【デバッグ】-【シンボル】を選びます。
フォルダマークのアイコンをクリックし、【シンボル ファイル(pdb)の場所】に
http://referencesource.microsoft.com/symbols と入力します。
シンボル サーバーからシンボルをキャッシュするディレクトリに、キャッシュを保存したい任意のディレクトリを入力します。
【シンボルが手動で読み込まれるときのみ上記の場所を探す】にチェックを入れます。
この状態で、【OK】ボタンをクリックします。警告が出た場合は、再度【OK】をクリックします。
これで、準備完了です。
ステップ実行してみる
適当なプロジェクトを作成して試してみましょう。
.NET Frameworkのソースを覗きたいところにカーソルを合わせて、メニューバーの【デバッグ】-【ブレークポイントの作成/解除】(F9)で、ブレークポイントを作成し、デバッグ実行してみましょう。
メニューバーの【デバッグ】-【デバッグ開始】で実行します。
ブレークポイントで止まったら、モジュールウィンドウ上の、自分の見たいDLLを右クリックします。
(モジュールウィンドウが表示されていない場合は、メニューバーの【デバッグ】-【ウィンドウ】-【モジュール】で表示させます。)
コンテキストメニューから【シンボルの読み込み】をクリックします。
これで、シンボルの状態が、「シンボルが読み込まれました。」に変わります。
【デバッグ】-【ステップ イン】(F11)で、ステップ実行を続けると、.NET Framework内のソースコードにまで進んでいきます。
(途中で使用許諾ウィンドウが表示された場合は、内容に従ってください。)
KB944899へのHotfix
ところで、Visual Studio 2008のこの機能には、KB944899へのHotfixが出ています。
KB944899のドキュメント:
FIX: Visual Studio 2008 performance decreases when you step through source code that you downloaded from Reference Source Server(英語)
FIX: ステップ 参照 ソース サーバー からダウンロードしたソース コードでインするとき、 Visual Studio 2008 パフォーマンスが低下します。(機械翻訳)
ブレークポイントに達するたびにソースのダウンロードを行ってしまいデバッグ時のパフォーマンスが悪いことへのFixのようです。
影響が深刻ではない場合は サービスパックを待つようにとの注意書きがありますが、修正プログラムのダウンロードは以下のページからできます。
追記:試してみたところ、このFIXは日本語版のVisual Studio 2008には、「このソフトウェア更新の対象製品はこのコンピュータにインストールされていません。[キャンセル] をクリックして、セットアップを終了してください。」というメッセージが表示されて、うまくインストールできないようです。
置き換えられるDLLのタイムスタンプ的には元のファイルが古いと思うのですが、現状で問題なさそうなら放っておいた方が無難だと思います。
Visual Studio 2005、Visual Studio 2008 Express Editionの場合
Visual Studio 2005や、Visual Studio 2008のExpress Editionの場合は、.NET Frameworkのソースコードをあらかじめローカルのディスク上にダウンロードしておき、参照させます。
ローカルのディスク上にダウンロードするには、.NET Mass Downloaderというフリーウェアを使用します。
.NET Mass Downloaderのサイト
.NET Mass Downloaderダウンロードページ
.NET Mass Downloaderは、コンソールアプリケーションです。コマンドプロンプトで実行します。
NET Framework 2.0のソースをダウンロードするには、
NetMassDownloader -directory C:\Windows\Microsoft.NET\Framework\v2.0.50727 -output C:\ReferenceSource
のようにタイプします。
C:\Windows\Microsoft.NET\Framework\v2.0.50727 は、.NET Framework 2.0のフォルダで、C:\ReferenceSourceが自分のパソコンのダウンロード先のフォルダです。
パスは自分の環境に合わせて読み替えてください。
実行するとダウンロードが始まります。使用許諾のウィンドウが表示された場合は、内容に従ってください。
Visual Studio 2008がすでに入った環境の場合は、シンボルキャッシュの設定を一度消してください。以下のように設定しないと、うまく動きません。
*すでにVisual Studio 2008がインストールされている場合
Visual Studioを起動して、メニューバーの【ツール】-【オプション】をクリックします。
【デバッグ】-【シンボル】を選びます。
フォルダマークのアイコンをクリックし、【シンボル ファイル(pdb)の場所】に何かあれば、チェックを外します。
【シンボル サーバーからシンボルをキャッシュするディレクトリ】欄に何か入っていれば消します。
Visual Studioの設定
メニューバーの【ツール】-【オプション】を開きます。
【デバッグ】-【全般】を選びます。
「`マイ コードのみ`設定を有効にする」のチェックを外します。
「元のバージョンと完全に一致するソース ファイルを必要とする」のチェックを外します。
【デバッグ】-【シンボル】を選びます。
「シンボルファイル(pdp)の場所」に、.NET MASS Downloaderでソースを取得したフォルダを入力します。
【OK】ボタンをクリックします。
最後に、ソリューションごとの設定が必要です。
新規のソリューションを作成するたびに、ソリューションエクスプロラーで、ソリューションを選択して、右クリック – プロパティ(あるいは、メニューバーの【プロジェクト】-【プロパティ】)で、プロパティウィンドウを開きます。
【デバッグソースファイル】を選択して、「ソース コードを含んでいるディレクトリ」に.NET MASS Downloaderでソースをのあるフォルダを入力します。
この状態で、デバッグ実行します。
あとの手順は、最初のVisual Studio 2008 Standard以上の場合と同じなので省きます。
追記:Express Editionをお使いの方へ
VC#2008Expressでモジュールウィンドウがない – C#、VB.NET、ASP.NET、C++/CLI、Javaで投稿された情報より補足です。
Express Editionの場合、モジュールウィンドウが省かれているため、手動でシンボルを読み込むことができません。
メニューバーの【ツール】-【オプション】を開き、【デバッグ】-【シンボル】の「シンボルが手動で読み込まれるときのみ上記の場所を探す」のチェックを外すことで、ステップインが可能になります。この設定を行ってください。
元にした記事:
Releasing the Source Code for the .NET Framework Libraries – ScottGu’s Blog(英語)
Shawn Burke’s Blog : Configuring Visual Studio to Debug .NET Framework Source Code(英語)
John Robbins’ Blog : Download All the .NET Reference Source Code at Once with Net Mass Downloader(英語)
関連図書
TrackBack URL :
Comments (4)
VC#Express2008で.NET Frameworkの…
VC#Express2008で.NET Frameworkのライブラリ・ソースへステップイン (more…)
トラックバック by myugaruの色々構想中・・・! — 2008/3/12 水曜日 @ 6:46:43
わざわざ手順のご修正までしてくださって本当に助かります。
無言でトラックバックなどしてお呼びたてしてしまったのではないかととても恐縮しております。
このように素晴らしい情報を調査して公開されるナカイさまのような方が多くいて私の様なGoogle先生頼りっぱなし人間には頭が下がるばかりです。
ナカイ様ほんとうにありがとうございました。
失礼な長文失礼いたしました。
コメント by myugaru — 2008/3/12 水曜日 @ 20:38:54
myugaruさん、はじめまして。
いえいえ、中途半端な情報を出してしまいお手数をおかけしました。
更新の遅いサイトですが、よろしくお願いします。
コメント by Nakai — 2008/3/12 水曜日 @ 21:32:11
.NET Frameworkのソースコードを見たい…
昨年末くらいにあのMicrosoftが.NET Frameworkのソースコードを公開するとかいう記事があちこちのニュースサイトに上がってました。
で、今年に入って本当に公開されたようなので、ちょっ…
トラックバック by 3流プログラマのメモ書き — 2008/4/14 月曜日 @ 14:19:45