DLL プロジェクトのデバッグ
DLL を作成するテンプレートは次のとおりです。
(C++、C#、および Visual Basic) クラス ライブラリ
(C++、C#、および Visual Basic): Windows フォーム コントロール ライブラリ
Windows コントロール ライブラリのデバッグは、クラス ライブラリ プロジェクトのデバッグとほぼ同じです。多くの場合、Windows コントロールは別のプロジェクトから呼び出します。呼び出し元のプロジェクトをデバッグする場合は、Windows コントロールのコードにステップ インし、ブレークポイントを設定し、ほかのデバッグ操作を実行できます。詳細については、「Windows フォーム コントロール」を参照してください。
(C# および Visual Basic): Web コントロール ライブラリ
詳細については、「Web コントロール ライブラリ (マネージ コード)」を参照してください。
(C++): MFC ActiveX コントロールと MFC スマート デバイス ActiveX コントロール
ActiveX コントロールは、インターネット経由でクライアント コンピューターにダウンロードでき、Web ページで表示したり、アクティブにしたりできるコントロールです。
ActiveX コントロールは、スタンドアロンでは実行できず、HTML Web ページに埋め込む必要があるため、そのデバッグは他の種類のコントロールのデバッグと似ています。詳細については、「方法 : ActiveX コントロールをデバッグする」を参照してください。
(C++): MFC スマート デバイス DLL
詳細については、「MFC のデバッグ技術」を参照してください。
このセクションでは、次のトピックについても説明します。
このトピックは次の内容で構成されており、クラス ライブラリ デバッグの準備に関する考慮事項について説明しています。
デバッグ バージョンのビルド
混合モードのデバッグ
既定の構成の変更
DLL のデバッグ方法
呼び出し元のアプリケーション
Web ページ上のコントロール
[イミディエイト] ウィンドウ
デバッグ バージョンのビルド
デバッグをどの方法で始める場合でも、DLL のデバッグ バージョンを先にビルドして、アプリケーションが参照する場所にデバッグ バージョンを配置するようにします。この手順を忘れると、アプリケーションが別のバージョンの DLL を参照して読み込む可能性があります。その場合、ブレークポイントがヒットせず、プログラムの実行が継続されます。デバッグ時には、デバッガーの [モジュール] ウィンドウを開いて、プログラムが読み込んだ DLL を確認できます。[モジュール] ウィンドウには、デバッグしているプロセスに読み込まれた DLL や EXE が一覧表示されます。詳細については、「方法 : [モジュール] ウィンドウを使用する」を参照してください。
C++ で記述されたコードにデバッガーをアタッチするには、コードが DebuggableAttribute を生成する必要があります。/ASSEMBLYDEBUG リンカー オプションを使ってリンクすると、これを自動的にコードに追加できます。
混合モードのデバッグ
DLL を呼び出す呼び出し元のアプリケーションは、マネージ コードで記述されている場合と、ネイティブ コードで記述されている場合があります。マネージ DLL とそれを呼び出すネイティブ コードの両方をデバッグする場合は、マネージ デバッガーとネイティブ デバッガーを共に有効にする必要があります。Project,プロジェクトプロパティ ページ のダイアログ ボックスまたはウィンドウでこれを選択できます。DLL プロジェクトからデバッグを開始するか、呼び出し元のアプリケーション プロジェクトからデバッグを開始するかによって、確認方法は異なります。詳細については、「方法 : 混合モードでデバッグする」を参照してください。
既定の構成の変更
プロジェクト テンプレートを使用してコンソール アプリケーション プロジェクトを作成するときは、Visual Studio により、デバッグ構成とリリース構成に必要な設定が自動的に作成されます。これらの設定は必要に応じて変更できます。詳細については、「C++ デバッグ構成のプロジェクト設定」、「C# デバッグ構成のプロジェクト設定」、「Visual Basic デバッグ構成のプロジェクト設定」、および「方法 : デバッグ構成とリリース構成を設定する」を参照してください。
DLL のデバッグ方法
このセクションの各プロジェクトでは、DLL を作成します。DLL は直接実行できず、アプリケーション (通常は EXE) から呼び出す必要があります。詳細については、「Visual C++ プロジェクトの作成および管理」を参照してください。呼び出し元のアプリケーションは、次の条件のいずれかに該当している場合があります。
クラス ライブラリを格納する同じ Visual Studio ソリューション内の、別のプロジェクトにビルドされたアプリケーション
テスト コンピューターや運用コンピューターに既に配置されている既存のアプリケーション
Web に配置され、URL からアクセスするアプリケーション
DLL を埋め込む Web ページを含む Web アプリケーション
呼び出し元のアプリケーションのデバッグ
DLL をデバッグするには、まず呼び出し元のアプリケーション (通常、EXE または Web アプリケーション) をデバッグします。これには、複数の方法があります。
呼び出し元のアプリケーションに対するプロジェクトが存在する場合は、そのプロジェクトを開いて、[デバッグ] メニューから実行を開始できます。詳細については、「方法 : 実行を開始する」を参照してください。
呼び出し元のアプリケーションが、テスト コンピューターや運用コンピューターに配置されている既存のプログラムであり、既に動作している場合は、それにアタッチできます。DLL が Internet Explorer によってホストされるコントロール、または Web ページ上のコントロールである場合は、この方法を使用します。詳細については、「方法 : 実行中のプロセスにアタッチする」を参照してください。
DLL プロジェクトからデバッグできます。詳細については、「方法 : DLL プロジェクトからデバッグする」を参照してください。
Visual Studio のイミディエイト ウィンドウからデバッグできます。この場合、イミディエイト ウィンドウは、アプリケーションの役割をします。
呼び出し元のアプリケーションのデバッグを始める前に、通常はクラス ライブラリ内にブレークポイントを設定します。詳細については、「Breakpoints and Tracepoints」を参照してください。ブレークポイントにヒットした場合は、コードのステップ実行により、1 行ずつアクションを確認して問題を特定できます。詳細については、「[NIB] コードのステップ実行の概要」を参照してください。
Web ページ上のコントロール
Web ページ コントロールをデバッグするには、それを埋め込む ASP.NET ページを作成します (このようなページがまだ存在しない場合)。次に、Web ページ コードとコントロール コードにブレークポイントを設定します。Web ページを Visual Studio から起動します。
呼び出し元のアプリケーションのデバッグを始める前に、通常は DLL 内にブレークポイントを設定します。ブレークポイントにヒットした場合は、コードのステップ実行により、1 行ずつアクションを確認して問題を特定できます。詳細については、「Breakpoints and Tracepoints」および「[NIB] コードのステップ実行の概要」を参照してください。
[イミディエイト] ウィンドウ
DLL の関数やメソッドは、呼び出し元のアプリケーションがなくても評価できます。そのためには、[イミディエイト] ウィンドウを使用して、デザイン時デバッグを行います。この方法でデバッグするには、DLL プロジェクトが開いているときに次の手順を実行します。
デバッガーの [イミディエイト] ウィンドウを開きます。
Class1 クラスの Test メソッドをテストする場合は、次の C# コードを [イミディエイト] ウィンドウで入力して、Class1 型のオブジェクトをインスタンス化します。このマネージ コードは、構文を適切に変更することで Visual Basic と C++ で動作します。
Class1 obj = new Class1();
C# では、すべての名前を完全修飾する必要があります。また、メソッドや変数はいずれもデバッグ セッションの現在のスコープとコンテキストに含まれる必要があります。
Test が 1 つの int パラメーターを受け取るものと想定し、[イミディエイト] ウィンドウを使用して Test を評価します。
?obj.Test(10)
結果が [イミディエイト] ウィンドウに出力されます。
Test の中にブレークポイントを配置し、関数を再び評価してデバッグを継続できます。
?obj.Test(10);
ブレークポイントにヒットすると、Test をステップ実行できます。Test の実行が終了すると、デバッガーはデザイン モードに戻ります。