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 とそれを呼び出すネイティブ コードの両方をデバッグする場合は、マネージ デバッガーとネイティブ デバッガーを共に有効にする必要があります。 これは、[<プロジェクト>プロパティ ページ] ダイアログ ボックスで選択できます。 DLL プロジェクトからデバッグを開始するか、呼び出し元のアプリケーション プロジェクトからデバッグを開始するかによって、確認方法は異なります。 詳細については、「方法 : 混合モードでデバッグする」を参照してください。

既定の構成の変更

プロジェクト テンプレートを使用してコンソール アプリケーション プロジェクトを作成するときは、Visual Studio により、デバッグ構成とリリース構成に必要な設定が自動的に作成されます。 これらの設定は必要に応じて変更できます。 詳細については、「C++ デバッグ構成のプロジェクト設定」、「C# デバッグ構成のプロジェクト設定」、「Visual Basic デバッグ構成のプロジェクト設定」、および「方法 : デバッグ構成とリリース構成を設定する」を参照してください。

DLL のデバッグ方法

このセクションの各プロジェクトでは、DLL を作成します。 DLL は直接実行できず、アプリケーション (通常は EXE) から呼び出す必要があります。 詳細については、「Visual C++ プロジェクトの作成および管理」を参照してください。 呼び出し元のアプリケーションは、次の条件のいずれかに該当している場合があります。

  • クラス ライブラリを格納する同じ Visual Studio ソリューション内の、別のプロジェクトにビルドされたアプリケーション

  • テスト コンピューターや運用コンピューターに既に配置されている既存のアプリケーション

  • Web に配置され、URL からアクセスするアプリケーション

  • DLL を埋め込む Web ページを含む Web アプリケーション

呼び出し元のアプリケーションのデバッグ

DLL をデバッグするには、まず呼び出し元のアプリケーション (通常、EXE または Web アプリケーション) をデバッグします。 これには、複数の方法があります。

  • 呼び出し元のアプリケーションに対するプロジェクトが存在する場合は、そのプロジェクトを開いて、[デバッグ] メニューから実行を開始できます。 詳細については、「<PAVEOVER>方法 : 実行を開始する」を参照してください。

  • 呼び出し元のアプリケーションが、テスト コンピューターや運用コンピューターに配置されている既存のプログラムであり、既に動作している場合は、それにアタッチできます。 DLL が Internet Explorer によってホストされるコントロール、または Web ページ上のコントロールである場合は、この方法を使用します。 詳細については、「<PAVE OVER> 方法 : 実行中のプロセスにアタッチする」を参照してください。

  • DLL プロジェクトからデバッグできます。 詳細については、「方法 : DLL プロジェクトからデバッグする」を参照してください。

  • Visual Studio のイミディエイト ウィンドウからデバッグできます。 この場合、イミディエイト ウィンドウは、アプリケーションの役割をします。

呼び出し元のアプリケーションのデバッグを始める前に、通常はクラス ライブラリ内にブレークポイントを設定します。 詳細については、「Breakpoints and Tracepoints」を参照してください。 ブレークポイントにヒットした場合は、コードのステップ実行により、1 行ずつアクションを確認して問題を特定できます。 詳細については、「<PAVEOVER> コードのステップ実行の概要」を参照してください。

Web ページ上のコントロール

Web ページ コントロールをデバッグするには、それを埋め込む ASP.NET ページを作成します (このようなページがまだ存在しない場合)。 次に、Web ページ コードとコントロール コードにブレークポイントを設定します。 Web ページを Visual Studio から起動します。

呼び出し元のアプリケーションのデバッグを始める前に、通常は DLL 内にブレークポイントを設定します。 ブレークポイントにヒットした場合は、コードのステップ実行により、1 行ずつアクションを確認して問題を特定できます。 詳細については、「Breakpoints and Tracepoints」を参照してください。

[イミディエイト] ウィンドウ

DLL の関数やメソッドは、呼び出し元のアプリケーションがなくても評価できます。 そのためには、[イミディエイト] ウィンドウを使用して、デザイン時デバッグを行います。 この方法でデバッグするには、DLL プロジェクトが開いているときに次の手順を実行します。

  1. デバッガーの [イミディエイト] ウィンドウを開きます。

  2. Class1 クラスの Test メソッドをテストする場合は、次の C# コードを [イミディエイト] ウィンドウで入力して、Class1 型のオブジェクトをインスタンス化します。 このマネージ コードは、構文を適切に変更することで Visual Basic と C++ で動作します。

        Class1 obj = new Class1();
    

    C# では、すべての名前を完全修飾する必要があります。 また、メソッドや変数はいずれもデバッグ セッションの現在のスコープとコンテキストに含まれる必要があります。

  3. Test が 1 つの int パラメーターを受け取るものと想定し、[イミディエイト] ウィンドウを使用して Test を評価します。

       ?obj.Test(10)
    

    結果が [イミディエイト] ウィンドウに出力されます。

  4. Test の中にブレークポイントを配置し、関数を再び評価してデバッグを継続できます。

       ?obj.Test(10);
    

    ブレークポイントにヒットすると、Test をステップ実行できます。 Test の実行が終了すると、デバッガーはデザイン モードに戻ります。

参照

関連項目

C++ デバッグ構成のプロジェクト設定

概念

C# デバッグ構成のプロジェクト設定

Visual Basic デバッグ構成のプロジェクト設定

デバッガーのセキュリティ

その他の技術情報

マネージ コードのデバッグ

デバッグの準備 : Visual C++ のプロジェクト

デバッグの準備: プロジェクトの種類が C#、F#、および Visual Basic のプロジェクト