Visual Studio でのデバッグ dllC#( C++、、Visual Basic F#、)Debug DLLs in Visual Studio (C#, C++, Visual Basic, F#)

DLL (ダイナミックリンクライブラリ) は、複数のアプリで使用できるコードとデータが含まれているライブラリです。A DLL (dynamic-link library) is a library that contains code and data that can be used by more than one app. Visual Studio を使用して、Dll の作成、ビルド、構成、デバッグを行うことができます。You can use Visual Studio to create, build, configure, and debug DLLs.

DLL を作成するCreate a DLL

次の Visual Studio プロジェクトテンプレートでは、Dll を作成できます。The following Visual Studio project templates can create DLLs:

  • C#、Visual Basic、またF#はクラスライブラリC#, Visual Basic, or F# Class Library
  • C#または Visual Basic Windows フォーム Control (WCF) ライブラリC# or Visual Basic Windows Forms Control (WCF) Library
  • C++ダイナミックリンクライブラリ (DLL)C++ Dynamic-Link Library (DLL)

詳細については、「MFC のデバッグ技術」を参照してください。For more information, see MFC debugging techniques.

WCF ライブラリのデバッグは、クラスライブラリのデバッグに似ています。Debugging a WCF Library is similar to debugging a Class Library. 詳細については、「 Windows フォームコントロール」を参照してください。For details, see Windows Forms Controls.

通常は、別のプロジェクトから DLL を呼び出します。You usually call a DLL from another project. 呼び出し元のプロジェクトをデバッグするときに、DLL の構成によっては、DLL コードにステップインしてデバッグすることができます。When you debug the calling project, depending on the DLL configuration, you can step into and debug the DLL code.

DLL デバッグ構成DLL debug configuration

Visual Studio プロジェクトテンプレートを使用してアプリを作成すると、Visual StudioVisual Studio によって、デバッグビルド構成およびリリースビルド構成に必要な設定が自動的に作成されます。When you use a Visual Studio project template to create an app, Visual StudioVisual Studio automatically creates required settings for Debug and Release build configurations. 必要に応じて、これらの設定を変更できます。You can change these settings if necessary. 詳細については、次の記事を参照してください。For more information, see the following articles:

DebuggableAttribute C++の設定Set C++ DebuggableAttribute

デバッガーがC++ DLL にアタッチされるようにするC++には、コードで DebuggableAttribute を生成する必要があります。For the debugger to attach to a C++ DLL, the C++ code must emit DebuggableAttribute.

@No__t_1 を設定するには:To set DebuggableAttribute:

  1. ソリューションエクスプローラーでC++ DLL プロジェクトを選択し、 [プロパティ] アイコンを選択するか、プロジェクトを右クリックして [プロパティ] を選択します。Select the C++ DLL project in Solution Explorer and select the Properties icon, or right-click the project and select Properties.

  2. [プロパティ] ペインの [リンカー > デバッグ] で、デバッグ可能な [アセンブリ] に [はい] (/assemblydebug) を選択します。In the Properties pane, under Linker > Debugging, select Yes (/ASSEMBLYDEBUG) for Debuggable Assembly.

詳細については、「 /assemblydebug」を参照してください。For more information, see /ASSEMBLYDEBUG.

C/C++ DLL ファイルの場所を設定するSet C/C++ DLL file locations

外部 DLL をデバッグするには、呼び出し元のプロジェクトが DLL、 .pdb ファイル、および dll に必要なその他のファイルを検索できる必要があります。To debug an external DLL, a calling project must be able to find the DLL, its .pdb file, and any other files the DLL requires. カスタムビルドタスクを作成して、これらのファイルを <project フォルダー > \Debug出力フォルダーにコピーしたり、ファイルを手動でコピーしたりすることができます。You can create a custom build task to copy these files to your <project folder>\Debug output folder, or you can copy the files there manually.

C/C++プロジェクトの場合は、出力フォルダーにコピーするのではなく、プロジェクトのプロパティページでヘッダーと LIB のファイルの場所を設定できます。For C/C++ projects, you can set header and LIB file locations in the project property pages, instead of copying them to the output folder.

C/C++ヘッダーおよび LIB ファイルの場所を設定するには:To set C/C++ header and LIB file locations:

  1. ソリューションエクスプローラーで C/C++ DLL プロジェクトを選択し、 [プロパティ] アイコンを選択するか、プロジェクトを右クリックして [プロパティ] を選択します。Select the C/C++ DLL project in Solution Explorer and select the Properties icon, or right-click the project and select Properties.

  2. プロパティペインの上部にある [構成] で、 [すべての構成] を選択します。At the top of the Properties pane, under Configuration, select All Configurations.

  3. [ C/C++ > 全般 > 追加のインクルードディレクトリ] の下で、ヘッダーファイルを含むフォルダーを指定します。Under C/C++ > General > Additional Include Directories, specify the folder that has header files.

  4. リンカー > 全般 > 追加ライブラリディレクトリ の下で、LIB ファイルがあるフォルダーを指定します。Under Linker > General > Additional Libraries Directories, specify the folder that has LIB files.

  5. リンカー > 追加の依存関係入力 > には、LIB ファイルの完全なパスとファイル名を指定します。Under Linker > Input > Additional Dependencies, specify the full path and filename for the LIB files.

  6. [OK] を選択します。Select OK.

C++プロジェクト設定の詳細については、「 Windows C++プロパティページリファレンス」を参照してください。For more information on C++ project settings, see Windows C++ property page reference.

デバッグバージョンのビルドBuild a Debug version

デバッグを開始する前に、必ず DLL のデバッグバージョンをビルドしてください。Make sure to build a Debug version of the DLL before you start debugging. DLL をデバッグするには、呼び出し元のアプリがその.pdb ファイルと dll に必要なその他のファイルを見つけることができる必要があります。To debug a DLL, a calling app must be able to find its .pdb file and any other files the DLL requires.

カスタムビルドタスクを作成して、DLL ファイルを <calling プロジェクトフォルダー > \Debug出力フォルダーにコピーしたり、ファイルを手動でコピーしたりすることができます。You can create a custom build task to copy the DLL files to your <calling project folder>\Debug output folder, or you can copy the files there manually.

必ず正しい場所に DLL を呼び出してください。Make sure to call the DLL in its correct location. これは明らかに見えるかもしれませんが、呼び出し元のアプリが DLL の別のコピーを検出して読み込む場合、設定したブレークポイントにデバッガーがヒットすることはありません。This may seem obvious, but if a calling app finds and loads a different copy of the DLL, the debugger will never hit the breakpoints you set.

DLL のデバッグDebug a DLL

DLL を直接実行することはできません。You can't run a DLL directly. これは、アプリ (通常は .exeファイル) から呼び出す必要があります。It must be called by an app, usually an .exe file. 詳細については、「 Visual Studio C++プロジェクト- 」を参照してください。For more information, see Visual Studio projects - C++.

DLL をデバッグするには、呼び出し元のアプリからデバッグを開始するか、呼び出し元のアプリを指定してdll プロジェクトからデバッグすることができます。To debug a DLL, you can start debugging from the calling app, or debug from the DLL project by specifying its calling app. デバッガーの [イミディエイト] ウィンドウを使用して、呼び出し元のアプリを使用せずに、デザイン時に DLL の関数やメソッドを評価することもできます。You can also use the debugger Immediate window to evaluate DLL functions or methods at design time, without using a calling app.

詳細については、「デバッガーの最初の確認」を参照してください。For more information, see First look at the debugger.

呼び出し元アプリからデバッグを開始するStart debugging from the calling app

DLL を呼び出すアプリは次のようになります。The app that calls a DLL can be:

  • DLL と同じまたは別のソリューション内の Visual StudioVisual Studio プロジェクトのアプリ。An app from a Visual StudioVisual Studio project in the same or a different solution from the DLL.
  • テストコンピューターまたは実稼働コンピューターで既に配置され、実行されている既存のアプリ。An existing app that is already deployed and running on a test or production computer.
  • Web に配置され、URL からアクセスするアプリケーション。Located on the web and accessed through a URL.
  • DLL を埋め込む web ページを含む web アプリ。A web app with a web page that embeds the DLL.

呼び出し元アプリから DLL をデバッグするには、次のようにします。To debug a DLL from a calling app, you can:

  • 呼び出し元のアプリのプロジェクトを開き、[デバッグ > デバッグの開始] を選択するか、 F5キーを押してデバッグを開始します。Open the project for the calling app, and start debugging by selecting Debug > Start Debugging or pressing F5.

    、またはor

  • テストコンピューターまたは実稼働コンピューターで既に展開され、実行されているアプリにアタッチします。Attach to an app that is already deployed and running on a test or production computer. このメソッドは、web サイトまたは web アプリの Dll に対して使用します。Use this method for DLLs on websites or in web apps. 詳細については、「方法: 実行中のプロセスにアタッチする」を参照してください。For more information, see How to: Attach to a running process.

呼び出し元のアプリのデバッグを開始する前に、DLL にブレークポイントを設定します。Before you start debugging the calling app, set a breakpoint in the DLL. ブレークポイントの使用」を参照してください。See Using breakpoints. DLL のブレークポイントにヒットしたら、コードをステップ実行して、各行でアクションを観察できます。When the DLL breakpoint is hit, you can step through the code, observing the action at each line. 詳細については、「デバッガーでのコード間の移動」を参照してください。For more information, see Navigate code in the debugger.

デバッグ中に、 [モジュール] ウィンドウを使用して、アプリが読み込む dll ファイルと .exeファイルを確認できます。During debugging, you can use the Modules window to verify the DLLs and .exe files the app loads. [モジュール] ウィンドウを開くには、デバッグ中に [デバッグ > Windows > モジュール] を選択します。To open the Modules window, while debugging, select Debug > Windows > Modules. 詳細については、「方法: [モジュール] ウィンドウを使用する」を参照してください。For more information, see How to: Use the Modules window.

[イミディエイト] ウィンドウを使用するUse the Immediate window

イミディエイトウィンドウを使用すると、デザイン時に DLL の関数やメソッドを評価できます。You can use the Immediate window to evaluate DLL functions or methods at design time. [イミディエイト] ウィンドウは、呼び出し元のアプリの役割を果たします。The Immediate window plays the role of a calling app.

Note

ほとんどのプロジェクトの種類では、デザイン時に [イミディエイト] ウィンドウを使用できます。You can use the Immediate window at design time with most project types. SQL、web プロジェクト、またはスクリプトではサポートされていません。It's not supported for SQL, web projects, or script.

たとえば、クラス Class1Test という名前のメソッドをテストするには、次のようにします。For example, to test a method named Test in class Class1:

  1. DLL プロジェクトを開いた状態で、[デバッグ > Windows > イミディエイト] を選択するか 、Ctrl +Alt +Iキーを押して、イミディエイトウィンドウを開きます。With the DLL project open, open the Immediate window by selecting Debug > Windows > Immediate or pressing Ctrl+Alt+I.

  2. [ C# イミディエイト] ウィンドウに次のコードを入力し、 enterキーを押して Class1 型のオブジェクトをインスタンス化します。Instantiate an object of type Class1 by typing the following C# code in the Immediate window and pressing Enter. このマネージコードは、 C#との Visual Basic に対して機能し、適切な構文を変更します。This managed code works for C# and Visual Basic, with appropriate syntax changes:

    Class1 obj = new Class1();
    

    C# では、すべての名前を完全修飾する必要があります。In C#, all names must be fully qualified. 言語サービスが式を評価しようとするときは、すべてのメソッドまたは変数が現在のスコープとコンテキストに含まれている必要があります。Any methods or variables must be in the current scope and context when the language service tries to evaluate the expression.

  3. Test が 1 つの int パラメーターを受け取るものと想定し、 Test [イミディエイト] ウィンドウを使用して を評価します。Assuming that Test takes one int parameter, evaluate Test using the Immediate window:

    ?obj.Test(10);
    

    結果は [イミディエイト] ウィンドウに出力されます。The result prints in the Immediate window.

  4. Test の中にブレークポイントを配置し、関数を再び評価してデバッグを継続できます。You can continue to debug Test by placing a breakpoint inside it, and then evaluating the function again.

    ブレークポイントにヒットし、Test をステップ実行できます。The breakpoint will be hit, and you can step through Test. Test の実行が終了すると、デバッガーはデザイン モードに戻ります。After execution has left Test, the debugger will be back in design mode.

混合モードのデバッグMixed-mode debugging

DLL の呼び出し元アプリをマネージコードまたはネイティブコードで記述できます。You can write a calling app for a DLL in managed or native code. ネイティブアプリがマネージ DLL を呼び出し、両方をデバッグする場合は、プロジェクトのプロパティでマネージデバッガーとネイティブデバッガーの両方を有効にすることができます。If your native app calls a managed DLL and you want to debug both, you can enable both the managed and native debuggers in the project properties. 正確なプロセスは、DLL プロジェクトからデバッグを開始するか、呼び出し元のアプリプロジェクトからデバッグを開始するかによって異なります。The exact process depends on whether you want to start debugging from the DLL project or the calling app project. 詳細については、「方法: 混合モードでデバッグする」を参照してください。For more information, see How to: Debug in mixed mode.

マネージ呼び出しプロジェクトからネイティブ DLL をデバッグすることもできます。You can also debug a native DLL from a managed calling project. 詳細については、「マネージコードとネイティブコードをデバッグする方法」を参照してください。For more information, see How to debug managed and native code.

関連項目See also