「.NET Frameworkソースのステップ実行を有効にする」を有効にするにはどうすればよいですか?


118

2013年2月22日更新:Microsoft Connectのエントリには、Alok Shriram(プログラムマネージャー、基本クラスライブラリ、.NET Framework)からの問題が解決されているというメモがあります。接続エントリは解決済み(固定)としてマークされています。

この問題は修正されています。参照ソースの更新を公開しました。それでも問題が解決しない場合はお知らせください。

一年半。

ボーナスリンク

元の質問

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


:この質問は、全体の一部です。


Visual Studio 2010には新機能が付属しています。

  • ツール、オプション、デバッグ、全般、.NET Frameworkソースのステップ実行を有効にする

オプションメニューのスクリーンショット

MSDNページの指示に従う方法:.NET Frameworkソースをデバッグする

.NET Frameworkソースのデバッグを有効にするには

  1. 上の[ツール]メニューをクリックし[オプション]を

  2. [オプション ]ダイアログボックス、クリックデバッグカテゴリを。

  3. では一般的なボックスで、次のチェックボックスを選択します。

    • .NET Frameworkソースのステップ実行を有効にする
    • ソースサーバーのサポートを有効にする

私はこれをします:

オプションメニューのスクリーンショット、選択した関連オプションを強調表示

:MSDNページのメモや、気づいたように、.NET Frameworkのソースのステップ実行を有効にすると、自動的に[**コードのみを有効にする(管理のみ)]がオフになることに注意してください。ソースサーバーサポートの診断メッセージも有効にしました。

これらのオプションを有効にすると、シンボルキャッシュのダウンロード場所が自動的に設定されます。

キャッシュディレクトリを示すオプションメニューのスクリーンショット(強調表示)

Microsoft Symbol Serverエントリはすでに存在しています(削除できません)。


MSDNページはシンボルをロードするように言っています:

モジュールウィンドウを使用してフレームワークシンボルをロードするには

  1. モジュール」ウィンドウで、シンボルが読み込まれていないモジュールを右クリックします。シンボルがロードされているかどうかは、[ Symbols Status ]列で確認できます。

  2. [ シンボルのロード元 ]をポイントし、[ Microsoftシンボルサーバー]をクリックして、Microsoftパブリックシンボルサーバーからシンボルをダウンロードするか、以前にシンボルを保存したディレクトリからロードする[シンボルパス]をクリックします

私はこれを試します:

ここに画像の説明を入力してください

そして、すべてのシンボルが読み込まれます:

上記のモジュールウィンドウのスクリーンショット

私はブレークポイントに座っていましたが、これは.NET Frameworkコードを呼び出そうとしています。

以下に転記されたコードのスクリーンショット

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

プッシュするF11と、デバッガーは単に次の行にスキップします。

以下に転記されたコードのスクリーンショット

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

    //Record the running scale factor used
    this.scaleFactor = new SizeF(
            this.scaleFactor.Width * factor.Width,
            this.scaleFactor.Height * factor.Height);

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


コードのブレークポイントに座っています。呼び出しスタックのさらに上の関数をダブルクリックしてみます。これで、.NETコードにジャンプできると思います。

ここに画像の説明を入力してください

それが機能しないことを除いて:Visual Studioは利用可能なソースがないと私に言っています:

ソースがありませんというエラーメッセージのスクリーンショット

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


私は、.NETコードにステップにしようとする前に、逆アセンブリビューに切り替えると(デバッグ - > Windowsの - > 逆アセンブル)、私は見ることができcall、.NETコードに:

コードのスクリーンショット

そして私がそうするとき、私はの逆アセンブリをデバッグすることになりSystem.Windows.Forms.ScaleControlます:

分解ウィンドウのスクリーンショット

これは、.NET Frameworkソースにステップインすることと同じではなく、同じように便利でもありません。

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


コンピューターに構成されたシンボルキャッシュパスには、シンボルキャッシュファイルが含まれています。

フォルダリストのスクリーンショット

そのためpdb、シンボルファイルをダウンロードしていますが、使用を拒否しています。

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


Leppieは、Debugログを確認することを提案しました(デバッグログウィンドウを開いたままにします。それ以外の場合は何もログに記録されません)。

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

以前のログでは、次のシンボルの読み込みが表示されていますSystem.Windows.Forms.dll

Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.

ここに画像の説明を入力してください

だからそれ私のシンボルを見つけることですが、それらを見つけることができなかったと主張しています。

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


Microsoft Italyの男は、[ 元のバージョンと完全に一致するようにソースファイルを要求する]をオフにすることを提案しています

オプションウィンドウのスクリーンショット

それはそれを修正しませんでした。

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


Microsoftの.NET Framework 4.0のソースサーバーにバグがあることが示唆されています。その提案に従って、私はプロジェクトを.NET Framework 3.5をターゲットにするように切り替えました:

ここに画像の説明を入力してください

それはそれを修正しませんでした。

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


同じ問題発生している別の人が64ビットバージョンのデバッガーを使用していたのか、どこかで誰かがぼんやりと疑問に思いました。さて、64ビットバージョンのVisual Studioなどはありませんが、Microsoftが64ビットプロセッサをサポートしていない場合に備えて、プロジェクトをAnyCPUからx86に切り替えようとしました(x64にJITされていました)。

ここに画像の説明を入力してください

それはそれを修正しませんでした:

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Visual Studio 2010で.NET Frameworkソースのステップ実行を有効にするにはどうすればよいですか?


こちらもご覧ください


ソースコード「キャッシュ」を確認しましたか?
leppie

@leppie「ソースコード「キャッシュ」」とはどういう意味ですか?ソースコードをキャッシュするフォルダーを意味している場合は、そこにデータが入力されています(Update 4を参照)
Ian Boyd

はい。そのソースファイルを開いてブレークポイントを設定することは可能ですか?
leppie

1
問題の優れた書き込み!
andersonbd1 2013年

1
VS2012でも動作しません。私がすべてを設定して機能しなくなった後、それは1日働いた。2日間、数十のコーヒー、数百のWebページが表示されても機能しません。同時に、symbolsource.orgによって公開されたソースは、魅力のように機能します。
Wiktor Zychla 2013

回答:


35

ソースコードをステップ実行するためのPDBは、RTMおよびService Packに対してのみポストされます。そのため、セキュリティアップデートが出てデバッグしようとしているdllが変更されると、ソースのステップ実行が機能しなくなります(つまり、「参照可能なソースがありません」とグレー表示され、「ソースを参照して検索」が表示されます。 ")。

ただし、適切な設定をすべて行ったら、次の回避策を使用できます。回避策は基本的に、dllの変更を引き起こしたセキュリティアップデートを見つけて削除することです。これには、これらのセキュリティ更新プログラムがマシンから削除されることの明らかな欠点があります。

回避策

  1. デバッグするdllを識別します(例:System.Windows.Forms.dll)
  2. デバッグ中にVisual Studioで[ モジュール]ウィンドウを開き、[ バージョン ]列を見つけます。バージョンがRTMまたはService Packのバージョンでない場合は、ワークフローを実行する必要があります。通常、RTM dllは「built by:RTMRel」と表示されます。一方、セキュリティ更新プログラムの一部であったDLLは、「作成者:RTMGDR」と表示されます。バージョン番号をメモします(たとえば、RTMGDRによってビルドされた4.0.30319.269)。
  3. ここで、このバージョンを作成した更新を検索します。これを行うには、support.microsoft.com / kb /でdllとバージョン番号を検索します。たとえば、次のGoogle検索を行いました。 site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. 検索により、更新に関する情報が表示されます。アドレスバーのKB番号に注意してください。私の例では、アドレスは http://support.microsoft.com/kb/2604121だったので、KB2604121が興味の対象です。
  5. [コントロールパネル]-> [プログラムと機能]に移動し、[インストールされた更新の表示]をクリックします。
  6. KB番号がリストされている更新を見つけます(右上のボックスで検索を使用できます)。
  7. そのアップデートをアンインストールします。
  8. DLLがRTMRelバージョンまたはSPバージョンに戻るまで、この同じDLLに対してこのプロセスを繰り返します。たとえば、System.Windows.Forms.dllの場合、RTMRelバージョンに戻る前に、KB2686827、KB2604121、KB2518870を削除する必要がありました。

デバッグ対象の.NETフレームワーク内のDLLごとにこれを行う必要があります。

それが完了したら、.netソース内にブレークポイントを設定する(たとえば、[ブレークポイント]タブに移動し、[新規]-> [関数でブレーク]と言って、System.Windows.Forms.Form.Formと入力します)か、.netの1つにステップインします。そのdllのメソッド。


1
正しい、トリックはアンインストールする正しいものを見つけることです(通常、それらの多くはインストールされており、アンインストールには時間がかかります)。
Matt Smith、

セキュリティ更新プログラムをアンインストールできません。会社の方針に反しています。Microsoft Symbolsサーバーと一致するmscorlib.dll(およびその他)のコピーを取得する方法はありますか?私のmscorlib.dllはバージョン4.0.30319.269(RTMGDR.030319-2600)です。おそらく、この新しいDLLを使用してGACを一時的に更新し、ソースのステップ実行を試すことができます。
kevinarpe 2012

それはおそらく私の会社のポリシーにも反しています-終わったら、再インストールするだけです。古いバージョンのmscorlib.dllをロールバックする必要がある他のdllから独立して(適切に機能するために)単純に構築することはできないと思います。さらに、古いdllでGACを一時的に更新することは、基本的にセキュリティ更新プログラムを一時的にアンインストールすることと同じです。
Matt Smith

マイクロソフトがセキュリティ更新プログラムのソースをリリースしない可能性が高いのは、誰かがコードの変更を比較し、セキュリティの脆弱性を理解し、独自のエクスプロイトを作成できるためです。Microsoftが認識していないのは、「ソースコード」がILSpyまたはRelfectorを使用してすでに利用可能であることです。したがって、Microsoftは、ソースコードをリリースしないことで、実際に誰もが安全になるわけではありません。開発者の生活がより困難になるだけです。
Ian Boyd

2
@IanBoydそれはMSの動機だと思います。私は彼らのワークフローが単にデバッグのためにソースPDBの更新をサポートしていないと思います。彼らは主にセキュリティホールの閉鎖に関係しています。
xanadont

6

残念ながらマイクロソフトには問題がありますが、Leppieが指摘したように(そして私は同じ結果を得ました)

あなたが参照したので、あなたの試みはとにかく失敗することに注意してください:

  • Microsoftシンボルサーバー

の代わりに:

  • referencesource.microsoft.com/symbols

.NET FrameworkソースコードをデバッグするためのVisual Studio構成の FAQ /トラブルシューティングセクションを参照してください


4

私は答えを見つけたと思います。

私はフィドラーで何が起こっていたかを追跡しました。現在利用できるのはシンボルのみで、ソースはないようです。

VSが「referencesource」サーバーからシンボルを読み込もうとすると、失敗します(404)。これは失敗するので、そのサーバー上のソースファイルにマップできないと思います。

http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

上記の失敗の後、実際のP​​DBを見つける「msdl」というサーバーを試行します(ただし、このサーバーにはソースコード情報がないようです)。

http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

全体として、サーバーに関する(一時的な)Microsoftの問題のようです。

しばらく前にソースコードがあったと思います。しかし、現在は機能していません。

編集:

さまざまな.NETバージョンで試してみましたが、すべて同じ結果でした。:(


1
まあ、私の正確な手順機能する(機能しない)、機能する(将来)、機能する(今日機能しない)場合は、非常に興味深いでしょう。私が問題に11時間費やしたので、それも非常にイライラします。
Ian Boyd

2
msdl.microsoft.comはMicrosoft Symbol Serverのようです
yoel halb '16

2
そしてまた壊れた
Simon_Weaver

7年後の「一時的なサーバーの問題」ではないようで、リンクはまだ機能していません。
JRH


1

私の場合、古い.NET 2.0 WinFormsアプリケーションをデバッグしていて、「Source Not Available」というメッセージが表示されました。推奨設定をすべて試しました。

最終的には、一時的に.NET 4.5を対象とするようにアプリを再構築し、ソースのステップを機能させることができました。おそらく、私のアプリはソースのステップ実行には古すぎました。目的にそぐわないことはわかっていますが、迅速でダーティなテストでは機能します。私が持っているバグは、まだ.NET 4.5に存在しています。:)

ターゲットフレームワーク



0

ここに公式の指示がありますhttps://referencesource.microsoft.com/setup.html

.NET FrameworkをデバッグするためにVisual Studio 2013を構成する

Visual Studio 2013を構成するには、[ツール]-> [オプション]-> [デバッグ]-> [一般]メニューで次のようにします。

  • コードのみを無効にする
  • プロパティと演算子のステップオーバーを無効にする
  • 元のバージョンと完全に一致する必要があるソースファイルを無効にする
  • .NET Frameworkソースのステップ実行を有効にする
  • ソースサーバーのサポートを有効にする

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.