DLL プロジェクトのデバッグ

更新 : 2007 年 11 月

このトピックの内容は、次の製品に該当します。

Edition

Visual Basic

C#

C++

Web Developer

Express

トピック該当 トピック該当 トピック該当 トピック該当なし

Standard

トピック該当

トピック該当

トピック該当

トピック該当なし

Pro/Team

トピック該当

トピック該当

トピック該当

トピック該当なし

表の凡例 :

トピック該当

対象

トピック該当なし

該当なし

トピックは該当しますが、コマンドは既定では非表示です

既定で非表示のコマンド

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 アプリケーション) をデバッグします。これには、複数の方法があります。

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

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

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

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

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

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

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

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

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

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# デバッグ構成のプロジェクト設定

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

デバッガのセキュリティ

参照

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

その他の技術情報

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

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

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