web-dev-qa-db-ja.com

参照されたdllをデバッグする方法(pdbを使用)

ワークスペースには、AとBという2つのソリューションがあります。

ソリューションAは、以前にコーディングを終えた古いプロジェクトです。ソリューションBでは、ソリューションAのいくつかのクラスを使用する必要があります。そのためには、ソリューションAのプロジェクトのいずれかのDLLへの参照を追加します。

問題は、デバッグしようとするときです。私もAのコードに足を踏み入れたいです。 Visual Studioはこれらのクラスのコードを読み込むことができず(「現在の場所に使用できるソースコードはありません。」)、逆アセンブリしか表示できません。これは役に立ちません。

ソリューションAからクラスをデバッグする唯一の方法は、ソリューションBを実行し、([デバッグ]メニュー項目で)すべてのプロセスをデタッチし、ソリューションAからプロセスをアタッチすることです。

ただし、これは非常に不便で、A OR Bを一度にしかデバッグできません。

参照されたdllのコードにステップインできるようにする方法はありますか(ソースコードはありますか)。


解決策:私の間違いは、プロジェクトは単一のソリューションの一部にしかなれないと思ったことでした。実際、プロジェクトはいくつものソリューションの一部になることができます。
古いプロジェクトを参照する必要がある場合、プロジェクトをソリューションに追加するだけです。これは、ソリューションエクスプローラーで[新規ソリューション]を右クリックして、[追加]、[既存のプロジェクト]の順にクリックして行います。
その後、プロジェクト参照を追加できるようになります。他の人が書いたように、おそらくあなた自身のコード(または変更とデバッグが必要な他のコード)へのdll参照の使用を完全に避けるべきです。

ソリューションの設計方法に関する非常に優れたリファレンスは、 MSDN にあります。

119
Elad

project参照がある場合、すぐに動作するはずです。

file(dll)参照の場合、dllと同じフォルダにデバッグシンボル(「pdb」ファイル)が必要です。プロジェクトがデバッグシンボルを生成していることを確認します(プロジェクトプロパティ=>ビルド=>詳細=>出力/デバッグ情報=フル);また、dllをcopiedしている場合は、それとともにpdbを配置します。

ファイルをコピーしたくない場合は、IDEにシンボルを直接ロードすることもできますが、それはより手間がかかります。

最も簡単なオプションは、プロジェクト参照を使用することです!

99
Marc Gravell

同じ問題がありました。彼は私が見つけたものです:

1)すべてのプロジェクトが同じフレームワークを使用していることを確認します(これは重要です!)

2)[ツール/オプション]> [デバッグ]> [全般]で、[マイコードのみを有効にする(管理のみ)がオンになっていないことを確認します

3)[ツール/オプション]> [デバッグ]> [シンボル]でキャッシュされたシンボルをクリアし、デフォルトの[Microsoft Symbol Servers]を除く[シンボルファイル(.pdb)の場所]リストボックスの下にあるすべてのフォルダーの場所を選択解除して削除しますが、それでも選択を解除します。 「このディレクトリのシンボルをキャッシュ」テキストボックスの静的パスも削除します。 [空のシンボルキャッシュ]ボタンをクリックします。最後に、「指定されたモジュールのみ」ラジオボタンがチェックされていることを確認してください。

4)すべてのプロジェクトのビルド/構成マネージャーメニューで、構成がデバッグモードになっていることを確認します。

41
scott_f

留意すべきもう1つのポイントは、参照されたdllがGACにインストールされていないことを確認してください。テスト後、dllをGACにインストールして、システムレベルのテストを行いました。その後、コードを再度デバッグする必要が生じたとき、GACから参照アセンブリを削除するまで、参照アセンブリにステップインできませんでした。

10
KevinHou

ステップ1:に移動ツール->オプション->デバッグ

ステップ2: [マイコードのみを有効にする]のチェックを外します

ステップ3:元のバージョンと完全に一致するソースファイルが必要のチェックを外します

ステップ4:プロパティと演算子のステップをオフにする

4
Arindam Dhar

参照されたdllのソースコードにブレークポイントを設定する場合は、まず、使用可能なpdbファイルがあることを確認してください。次に、関連するソースコードファイルを開いて、そこにブレークポイントを設定します。ソースファイルはソリューションの一部である必要はありません。 Visual Studioの参照コードにブレークポイントを設定するにはどうすればよいですか?

[デバッグ]-> [ウィンドウ]-> [ブレークポイント]を使用して、ブレークポイントウィンドウでブレークポイントを確認できます。

このアプローチには、デバッグのためだけに既存のプロジェクトをソリューションに追加する必要がないという利点があります。これを省略すると、ビルド時間が大幅に短縮されるためです。明らかに、1つのプロジェクトのみを含むソリューションを構築する方が、多数のプロジェクトを含むソリューションを構築するよりもはるかに高速です。

2
Carl in 't Veld

同じフォルダーに*.pdbファイルがあり、 Arindam のオプションを使用しましたが、それでも機能しませんでした。 ネイティブコードデバッグを有効にするを有効にする必要がありました。これはプロジェクトプロパティ>デバッグの下にあります。

2
Roald

ソリューションの一部に外部クラスライブラリプロジェクトを含めたくないため、別の方法で使用するアセンブリにステップインします。

私のソリューションには、他のプロジェクトからの独自のDLLを含む「Common Assemblies」ディレクトリがあります。参照するDLLには、デバッグ用のPDBファイルも付属しています。

ブレークポイントをデバッグおよび設定するために、アセンブリからメソッドまたはコンストラクターを呼び出している消費側アプリケーションのソースにブレークポイントを設定し、ステップINTO(F11)でメソッド/コンストラクター呼び出しを実行します。

デバッガーはアセンブリのソースファイルをVSに読み込み、その時点でアセンブリ内の新しいブレークポイントを設定できます。

簡単ではありませんが、新しいプロジェクト参照を含めず、代わりに共有アセンブリを参照したい場合に機能します。

1
jlafay

動作するはずです。私は、.exeファイルとdllを同時にデバッグしていました!私がお勧めするのは、1)Bプロジェクトにdllのパスを含める、2)Aプロジェクトをデバッグでコンパイルする、3)パスがA dllおよびde pdbファイルを指すように制御する、... 4)その後、 Bプロジェクトのデバッグを開始し、すべてが問題なければ、両方のプロジェクトでデバッグできます!

0
Matthieu