Visual Studioで外部クラスライブラリプロジェクトをデバッグする方法


136

別のvsソリューションにある外部プロジェクト(B)クラスライブラリのアセンブリを参照するプロジェクト(A)があります。

プロジェクトAからプログラムを実行しながら、Bからクラスライブラリを効率的にデバッグする方法をまだ理解していません。Aからデバッグ時にステップインできるように、デバッグ情報など、プロジェクトBで有効にする必要があるものはありますか?

前もって感謝します。

回答:


202

Just My Code(JMC)を無効にしてみてください。

  • ツール->オプション->デバッガ
  • 「コードのみを有効にする」のチェックを外します

デフォルトでは、デバッガーは世界のビューをソリューション内にのみ含まれるコードに制限しようとします。これは時々本当に大変ですが、ソリューションにないコードをデバッグする場合(状況と同様)、それを表示するためにJMCを無効にする必要があります。それ以外の場合、コードは外部として扱われ、主にビューから隠されます。

編集

コードに問題がある場合は、次のことを試してください。

  • デバッグ->ウィンドウ->モジュール
  • 興味のあるプロジェクトのDLLを見つける
  • 右クリック->シンボルの読み込み->他のプロジェクトの.PDBへのパスを選択

2
特定のチェックボックスはすでにオフになっています。私が気づいたのは、それが外部ライブラリのメソッドに入るのですが、インターフェイスの一部であるメソッドを呼び出そうとすると、ステップオーバーします。
コンスタンティノス

DLLのプロパティに移動し、ローカルのコピーがTrueに設定されていることを確認する必要がある場合があります。そうしないと、モジュールは参照用の.pdbを見つけることができません。
ブライアンレイナー2014年

私のコードだけでは何の違いもないようです(有効にしても外部コードにジャンプできます)が、デバッガーでモジュールを見つけると役立ちます。
TheOperator 2015

3
このフォルダで一致するシンボルファイルが見つかりませんでした。
クリスティン

1
参照モジュールのPDBファイルがない場合は、ReSharperを使用して、Debug / Windows / Modulesの右クリックメニューの[ReSharper Deecompilerでシンボルをロード]オプションを使用してバイナリを逆コンパイルできます。とてもパワフルな。
emilast

12

これはしばらくの間私を悩ませてきました。私が通常やっていることは、デバッグモードを使用して外部ライブラリを再構築し、.dllと.pdbファイルの両方を私のWebサイトのビンにコピーすることです。これにより、ライブラリコードに足を踏み入れることができます。


9

のパスを想定

事業 A

C:\Projects\ProjectA

事業 B

C:\Projects\ProjectB

ProjectBのDLLは

C:\Projects\ProjectB\bin\Debug\

デバッグするProjectBからProjectA、次の操作を行います

  1. コピーBのdllファイルとDLLの.PDBProjectAのコンパイルディレクトリを。
  2. 次にデバッグしProjectAます。デバッグ中にdllのメソッドやイベントなどを呼び出す必要がある部分にコードが到達したら、を押しF11てdllのコードにステップインします。

注:.PDBファイルをコピーしてください


5

Visual Studioの2つのインスタンスを実行します。1つは外部DLL用で、もう1つはメインアプリケーション用です。
外部DLLのプロジェクトプロパティで、以下を設定します。

ビルドイベント:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

デバッグ:

  • 外部プログラムを起動します。 C:\<path-to-main>\bin\debug\<AppName>.exe

  • 作業ディレクトリ C:\<path-to-main>\bin\debug

このようにして、外部DLLをビルドすると、メインアプリケーションのディレクトリで更新されます。外部dllのプロジェクトからデバッグにヒットした場合、メインアプリケーションは実行されますが、デバッガーは外部dllのブレークポイントにのみヒットします。メインプロジェクトからデバッグにヒットした場合、メインアプリケーションは最後にビルドされた外部DLLで実行されますが、デバッガーはメインプロジェクトのブレークポイントにのみヒットします。

私は1つのデバッガーが両方の仕事をすることを理解していますが、この方法で2つをまっすぐに保つ方が簡単だと思います。


1

[この回答を送ってくれたマーティン・ベケットによると]

外部ライブラリにデバッグできます。

[プロジェクトの設定]タブで、[ソースコード]フィールドの「ビジュアルスタジオディレクトリ」を探し、openCVソースへのパスを含めます。次に、各デバッグdllの.pdbファイルがdllと同じディレクトリにあることを確認します。


0

プロジェクト(B)のブレークポイントがヒットしなかったため、同様の問題が発生していました。私の解決策は、dllを更新する必要があるため、プロジェクト(B)を再ビルドしてからプロジェクト(A)をデバッグすることでした。

Visual Studioでは、外部ライブラリにデバッグできます。


0

NuGetリファレンス

-Project_A(project_a.dllを生成する)-Project_B(project_b.dllを生成する)およびProject_BがNuGetパッケージによるProject_Aへの参照を想定し、project_a.dll、project_a.pdbをProject_B / Packagesフォルダーにコピーします。実際には、/ binにコピーする必要があります。

ここでProject_Aをデバッグします。デバッグ中にdllのメソッドやイベントなどを呼び出す必要がある部分にコードが到達したら、F11キーを押してdllのコードにステップインします。

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