チュートリアル: 同じデバッグ セッションで C# と C++ をデバッグするTutorial: Debug C# and C++ in the same debugging session

Visual Studio では、1 つのデバッグ セッションで複数のデバッガーの種類を有効にすることができます。これは混合モードのデバッグと呼ばれます。Visual Studio lets you enable more than one debugger type in a debugging session, which is called mixed-mode debugging. このチュートリアルでは、1 つのデバッグ セッションで、マネージド コードとネイティブ コードの両方をデバッグすることを学習します。In this tutorial, you learn to debug both managed and native code in a single debugging session.

このチュートリアルでは、マネージド アプリからネイティブ コードをデバッグする方法を示していますが、ネイティブ アプリからマネージド コードをデバッグすることもできます。This tutorial shows how to debug native code from a managed app, but you can also debug managed code from a native app. デバッガーは、Python とネイティブ コードなどの他の種類の混合モードのデバッグもサポートしており、ASP.NET などのアプリの種類ではスクリプト デバッガーの使用もサポートしています。The debugger also supports other types of mixed-mode debugging, such as debugging Python and native code, and using the script debugger in app types such as ASP.NET.

このチュートリアルでは、次の作業を行います。In this tutorial, you will:

  • 単純なネイティブ DLL を作成するCreate a simple native DLL
  • DLL を呼び出す単純な .NET Core または .NET Framework のアプリを作成するCreate a simple .NET Core or .NET Framework app to call the DLL
  • 混合モードのデバッグを構成するConfigure mixed-mode debugging
  • デバッガーを起動するStart the debugger
  • マネージド アプリでブレークポイントにヒットさせるHit a breakpoint in the managed app
  • ネイティブ コードにステップ インするStep into the native code

必須コンポーネントPrerequisites

Visual Studio がインストールされ、次のワークロードがある必要があります。You must have Visual Studio installed, with the following workloads:

  • C++ によるデスクトップ開発Desktop development with C++
  • 作成するアプリの種類に応じて、 .NET デスクトップ開発または .NET Core クロス プラットフォーム開発のいずれかEither .NET desktop development or .NET Core cross platform development, depending on which type of app you want to create.

Visual Studio をお持ちでない場合は、 Visual Studio のダウンロード  ページに移動し、無料試用版をインストールしてください。If you don't have Visual Studio, go to the Visual Studio downloads page to install it for free.

Visual Studio はインストールされているが、必要なワークロードがない場合は、Visual Studio の [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウにある [Visual Studio インストーラーを開く] を選択します。If you have Visual Studio installed, but don't have the workloads you need, select Open Visual Studio Installer in the left pane of the Visual Studio New Project dialog box. Visual Studio インストーラーで、必要なワークロードを選択し、 [変更] を選択します。In the Visual Studio Installer, select the workloads you need, and then select Modify.

単純なネイティブ DLL を作成するCreate a simple native DLL

DLL プロジェクト用のファイルを作成するには:To create the files for the DLL project:

  1. Visual Studio を開き、プロジェクトを作成します。Open Visual Studio and create a project.

    Esc キーを押してスタート ウィンドウを閉じます。Press Esc to close the start window. Ctrl + Q キーを押して検索ボックスを開き、「空のプロジェクト」と入力し、 [テンプレート] を選択して、C++ 用の [新しい空のプロジェクト プロジェクトの作成] の順に選択します。Type Ctrl + Q to open the search box, type Empty Project, choose Templates, then choose Create new Empty Project project for C++. 表示されたダイアログ ボックスで、 [作成] を選択します。In the dialog box that appears, choose Create. 次に、Mixed_Mode_Debugging のような名前を入力して、 [作成] をクリックします。Then, type a name like Mixed_Mode_Debugging and click Create.

    上部のメニュー バーで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択します。From the top menu bar, choose File > New > Project. [新しいプロジェクト] の左側のウィンドウで、 [Visual C++] の下にある [その他] を選択し、次に、真ん中のウィンドウで [空のプロジェクト] を選択します。In the left pane of the New project dialog box, under Visual C++, choose Other, and then in the middle pane choose Empty Project. 次に、Mixed_Mode_Debugging のような名前を入力して、 [OK] をクリックします。Then, type a name like Mixed_Mode_Debugging and click OK.

    [空のプロジェクト] プロジェクト テンプレートが表示されない場合は、 [ツール] > [ツールと機能を取得...] に移動して、Visual Studio インストーラーを開きます。If you don't see the Empty Project project template, go to Tools > Get Tools and Features..., which opens the Visual Studio Installer. Visual Studio インストーラーが起動します。The Visual Studio Installer launches. [C++ によるデスクトップ開発] ワークロード、 [変更] の順に選択します。Choose the Desktop development with C++ workload, then choose Modify.

    Visual Studio によってプロジェクトが作成されます。Visual Studio creates the project.

  2. [新しいプロジェクト] ダイアログ ボックスの [Visual C++] の下で、 [その他] を選択し、中央のウィンドウで [空のプロジェクト] を選択します。In the New Project dialog box, under Visual C++, select Other, and then select Empty Project in the middle pane.

  3. [名前] フィールドに「Mixed_Mode_Debugging」を入力し、 [OK] を選択します。In the Name field, type Mixed_Mode_Debugging, and then select OK.

    Visual Studio によって空のプロジェクトが作成され、ソリューション エクスプローラーにファイルが表示されます。Visual Studio creates the empty project and displays it in Solution Explorer.

  4. ソリューション エクスプローラーで、 [ソース ファイル] を選択し、 [プロジェクト] > [新しい項目の追加] の順に選択します。In Solution Explorer, select Source Files, and then select Project > Add New Item. または、 [ソース ファイル] を右クリックして、 [追加] > [新しい項目] の順に選択します。Or, right-click Source Files and select Add > New Item.

  5. [新しい項目] ダイアログで、 [C++ ファイル (.cpp)] を選択します。In the New Item dialog, select C++ file (.cpp). [名前] フィールドに「Mixed_Mode.cpp」を入力し、 [追加] を選択します。Type Mixed_Mode.cpp in the Name field, and then select Add.

    Visual Studio によって新しい C++ ファイルがソリューション エクスプローラーに追加されます。Visual Studio adds the new C++ file to Solution Explorer.

  6. Mixed_Mode.cpp に次のコードをコピーします。Copy the following code into Mixed_Mode.cpp:

    #include "Mixed_Mode.h"
    
  7. ソリューション エクスプローラーで、 [ヘッダー ファイル] を選択し、 [プロジェクト] > [新しい項目の追加] の順に選択します。In Solution Explorer, select Header Files, and then select Project > Add New Item. または、 [ヘッダー ファイル] を右クリックして、 [追加] > [新しい項目] の順に選択します。Or, right-click Header Files and select Add > New Item.

  8. [新しい項目] ダイアログで、 [ヘッダー ファイル (.h)] を選択します。In the New Item dialog, select Header file (.h). [名前] フィールドに「Mixed_Mode.h」を入力し、 [追加] を選択します。Type Mixed_Mode.h in the Name field, and then select Add.

    Visual Studio によって新しいヘッダー ファイルがソリューション エクスプローラーに追加されます。Visual Studio adds the new header file to Solution Explorer.

  9. Mixed_Mode.h に次のコードをコピーします。Copy the following code into Mixed_Mode.h:

    #ifndef MIXED_MODE_MULTIPLY_HPP
    #define MIXED_MODE_MULTIPLY_HPP
    
    extern "C"
    {
      __declspec(dllexport) int __stdcall mixed_mode_multiply(int a, int b) {
        return a * b;
      }
    }
    #endif
    
  10. [ファイル] > [すべて保存] を選択するか、Ctrl+Shift+S キーを押してファイルを保存します。Select File > Save All or press Ctrl+Shift+S to save the files.

DLL プロジェクトを構成してビルドするには:To configure and build the DLL project:

  1. Visual Studio ツールバーで、 [デバッグ] 構成を選択し、 [x86] または [x64] プラットフォームを選択します。In the Visual Studio toolbar, select Debug configuration and x86 or x64 platform. 呼び出し元のアプリが常に 64 ビット モードで実行される .NET Core の場合は、プラットフォームとして [x64] を選択します。If your calling app will be .NET Core, which always runs in 64-bit mode, select x64 as the platform.

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

  3. [プロパティ] ウィンドウの上部で、 [構成][アクティブ (デバッグ)] に設定され、 [プラットフォーム] がツールバーで設定したプラットフォームと同じになっていることを確認します ( [x64] 、または x86 プラットフォームの場合は [Win32] )。At the top of the Properties pane, make sure the Configuration is set to Active(Debug) and the Platform is the same as what you set in the toolbar: x64, or Win32 for x86 platform.

    Important

    プラットフォームを x86 から x64 (またはその逆) に切り替えた場合、新しいプラットフォーム用にプロパティを再構成する必要があります。If you switch platform from x86 to x64 or vice versa, you must reconfigure the properties for the new platform.

  4. 左側のウィンドウの [構成プロパティ] の下で、 [リンカー] > [詳細設定] の順に選択し、 [エントリポイントなし] の横のドロップダウンで [いいえ] を選択します。Under Configuration Properties in the left pane, select Linker > Advanced, and in the dropdown next to No Entry Point, select No. [いいえ] に変更した場合は、 [適用] を選択します。If you had to change it to No, select Apply.

  5. [構成プロパティ] の下で、 [全般] を選択し、 [構成の種類] の横にあるドロップダウンで [ダイナミック ライブラリ (.dll)] を選択します。Under Configuration Properties, select General, and in the dropdown next to Configuration Type, select Dynamic Library (.dll). [適用] を選択し、 [OK] を選択します。Select Apply, and then select OK.

    ネイティブ DLL に切り替える

  6. ソリューション エクスプローラーでプロジェクトを選択し、 [ビルド] > [ソリューションのビルド] の順に選択し、F7 キーを押すか、プロジェクトを右クリックして [ビルド] を選択します。Select the project in Solution Explorer and then select Build > Build Solution, press F7, or right-click the project and select Build.

    プロジェクトがエラーのない状態でビルドされます。The project should build with no errors.

単純なマネージド アプリを作成して DLL を呼び出すCreate a simple managed app to call the DLL

  1. Visual Studio を起動し、新しいプロジェクトを作成します。Open Visual Studio and create a new project.

    Esc キーを押してスタート ウィンドウを閉じます。Press Esc to close the start window. Ctrl + Q キーを押して検索ボックスを開き、「コンソール」と入力し、 [テンプレート] を選択して、C# 用の [Create new Console App (.NET Framework) project](新しいコンソール アプリ (.NET Framework) プロジェクトの作成) を選択します。Type Ctrl + Q to open the search box, type console, choose Templates, and then choose Create new Console App (.NET Framework) project for C#. 表示されたダイアログ ボックスで、 [作成] を選択します。In the dialog box that appears, choose Create.

    次に、Mixed_Mode_Calling_App のような名前を入力して、 [作成] をクリックします。Then, type a name like Mixed_Mode_Calling_App and click Create.

    上部のメニュー バーで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択します。From the top menu bar, choose File > New > Project. [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、 [Visual C#] の下にある [Windows デスクトップ] を選択し、次に真ん中のウィンドウで [コンソール アプリ (.NET Framework)] または [コンソール アプリ (.NET Core)] を選択します。In the left pane of the New project dialog box, under Visual C#, choose Windows Desktop, and then in the middle pane choose Console App (.NET Framework) or Console App (.NET Core).

    次に、Mixed_Mode_Calling_App のような名前を入力して、 [OK] をクリックします。Then, type a name like Mixed_Mode_Calling_App and click OK.

    [コンソール アプリ] プロジェクト テンプレートが表示されない場合は、 [ツール] > [ツールと機能を取得...] に移動して、Visual Studio インストーラーを開きます。If you don't see the Console App project template, go to Tools > Get Tools and Features..., which opens the Visual Studio Installer. .NET デスクトップ開発ワークロードを選択し、 [変更] を選択します。Choose the .NET desktop development workload, then choose Modify.

    Note

    既存の C++ ソリューションに新しいマネージド プロジェクトを追加することもできますが、新しいソリューションを作成すると、より多くのデバッグ シナリオがサポートされます。Although you could also add the new managed project to your existing C++ solution, creating a new solution supports more debugging scenarios.

    Visual Studio によって空のプロジェクトが作成され、ソリューション エクスプローラーにファイルが表示されます。Visual Studio creates the empty project and displays it in Solution Explorer.

  2. Program.cs 内のすべてのコードを次のコードで置き換えます。Replace all the code in Program.cs with the following code:

    using System;
    using System.Runtime.InteropServices;
    
    namespace Mixed_Mode_Calling_App
    {
        public class Program
        {
            // Replace the file path shown here with the
            // file path on your computer. For .NET Core, the typical (default) path
            // for a 64-bit DLL might look like this:
            // C:\Users\username\source\repos\Mixed_Mode_Debugging\x64\Debug\Mixed_Mode_Debugging.dll
            // Here, we show a typical path for a DLL targeting the **x86** option.
            [DllImport(@"C:\Users\username\source\repos\Mixed_Mode_Debugging\Debug\Mixed_Mode_Debugging.dll", EntryPoint =
            "mixed_mode_multiply", CallingConvention = CallingConvention.StdCall)]
            public static extern int Multiply(int x, int y);
            public static void Main(string[] args)
            {
                int result = Multiply(7, 7);
                Console.WriteLine("The answer is {0}", result);
                Console.ReadKey();
            }
        }
    }
    
  3. 新しいコードで、[DllImport] 内のファイル パスを先ほど作成した Mixed_Mode_Debugging.dll への実際のファイル パスに置き換えます。In the new code, replace the file path in [DllImport] with your file path to the Mixed_Mode_Debugging.dll you just created. ヒントとしてコード コメントを参照してください。See the code comment for hints. プレースホルダー username を必ず置き換えてください。Make sure to replace the username placeholder.

  4. [ファイル] > [Program.cs の保存] を選択するか、Ctrl+S キーを押してファイルを保存します。Select File > Save Program.cs or press Ctrl+S to save the file.

混合モードのデバッグを構成するConfigure mixed-mode debugging

.NET Framework アプリ用に混合モードのデバッグを構成するにはTo configure mixed-mode debugging for a .NET Framework app

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

  2. 左側のウィンドウで [デバッグ] を選択し、 [ネイティブ コードのデバッグを有効にする] チェック ボックスをオンにしてから、プロパティ ページを閉じて変更を保存します。Select Debug in the left pane, select the Enable native code debugging check box, and then close the properties page to save the changes.

    混合モード デバッグを有効にする

.NET Core アプリ用に混合モード デバッグを構成するにはTo configure mixed-mode debugging for a .NET Core app

Visual Studio 2017 以降、Visual Studio のほとんどのバージョンでは、プロジェクト プロパティの代わりに launchSettings.json ファイルを使用して、.NET Core アプリでネイティブ コードの混合モード デバッグを有効にする必要があります。In most versions of Visual Studio starting in Visual Studio 2017, you must use the launchSettings.json file instead of the project properties to enable mixed-mode debugging for native code in a .NET Core app. この機能の UI の更新を追跡するには、この GitHub の問題を参照してください。To track UI updates for this feature, see this GitHub issue.

  1. ソリューション エクスプローラーで、 [プロパティ] を展開し、launchSettings.json ファイルを開きます。In Solution Explorer, expand Properties, and open the launchSettings.json file.

    Note

    既定では、launchSettings.jsonC:\Users\username\source\repos\Mixed_Mode_Calling_App\Properties にあります。By default, launchSettings.json is in C:\Users\username\source\repos\Mixed_Mode_Calling_App\Properties. launchSettings.json が存在しない場合は、ソリューション エクスプローラーMixed_Mode_Calling_App プロジェクトを選択し、 [プロパティ] アイコンを選択するか、プロジェクトを右クリックして [プロパティ] を選択します。If launchSettings.json doesn't exist, select the Mixed_Mode_Calling_App project in Solution Explorer and then select the Properties icon, or right-click the project and select Properties. [デバッグ] タブで一時的な変更を加え、プロジェクトをビルドします。Make a temporary change in the Debug tab, and build the project. これにより launchSettings.json ファイルが作成されます。This will create a launchSettings.json file. [デバッグ] タブで行った変更を元に戻します。Revert the change that you made in the Debug tab.

  2. launchsettings.json ファイルに、次の行を追加します。In the launchsettings.json file, add the following line:

    "nativeDebugging": true
    

    完全なファイルは、次の例のようになります。The complete file will look like the following example:

    {
      "profiles": {
        "Mixed_Mode_Calling_App": {
          "commandName": "Project",
          "nativeDebugging": true
        }
      }
    }
    

ブレークポイントを設定し、デバッグを開始するSet a breakpoint and start debugging

  1. C# プロジェクトで Program.cs を開きます。In the C# project, open Program.cs. コードの次の行にブレークポイントを設定するには、余白の左端をクリックして行を選択し、F9 キーを押すか、行を右クリックして [ブレークポイント] > [ブレークポイントの挿入] の順に選択します。Set a breakpoint on the following line of code by clicking in the far left margin, selecting the line and pressing F9, or right-clicking the line and selecting Breakpoint > Insert Breakpoint.

    int result = Multiply(7, 7);
    

    左側の余白のブレークポイントを設定した場所に赤い円が表示されます。A red circle appears in the left margin where you set the breakpoint.

  2. F5 キーを押して、Visual Studio のツールバーで緑色の矢印を選択するか、 [デバッグ] > [デバッグの開始] の順に選択してデバッグを開始します。Press F5, select the green arrow in the Visual Studio toolbar, or select Debug > Start Debugging to start debugging.

    設定したブレークポイントのところでデバッガーが一時停止します。The debugger pauses on the breakpoint that you set. 黄色の矢印は、デバッガーが現在一時停止している場所を示します。A yellow arrow indicates where the debugger is currently paused.

ネイティブ コードのステップ インとステップ アウトStep in and out of native code

  1. マネージド アプリでデバッグが一時停止している間に、F11 キーを押すか、 [デバッグ] > [ステップ イン] の順に選択します。While debugging is paused in the managed app, press F11, or select Debug > Step Into.

    Mixed_Mode.h ネイティブ ヘッダー ファイルが開き、デバッガーが一時停止されている場所に黄色の矢印が示されます。The Mixed_Mode.h native header file opens, and you see the yellow arrow where the debugger is paused.

    ネイティブ コードにステップ インする

  2. これで、ブレークポイントを設定してそこにヒットしたら、ネイティブ コードまたはマネージド コード内の変数を検査できます。Now, you can set and hit breakpoints and inspect variables in the native or managed code.

    • ソース コード内の変数をポイントすると、その値が表示されます。Hover over variables in the source code to see their values.

    • 変数とその値は、 [自動変数] ウィンドウと [ローカル] ウィンドウで確認できます。Look at variable and their values in the Autos and Locals windows.

    • デバッガーで一時停止中に、ウォッチ ウィンドウと [呼び出し履歴] ウィンドウを使用することもできます。While paused in the debugger, you can also use the Watch windows and the Call Stack window.

  3. もう一度 F11 キーを押して、デバッガーを 1 行進めます。Press F11 again to advance the debugger one line.

  4. Shift+F11 キーを押すか、 [デバッグ] > [ステップ アウト] を選択して、マネージド アプリで実行を続行し、もう一度一時停止します。Press Shift+F11 or select Debug > Step Out to continue execution and pause again in the managed app.

  5. F5 キーを押すか、緑色の矢印を選択してアプリのデバッグを続行します。Press F5 or select the green arrow to continue debugging the app.

おめでとうございます!Congratulations! 混合モードのデバッグのチュートリアルを完了しました。You have completed the tutorial on mixed-mode debugging.

次のステップNext step

このチュートリアルでは、混合モード デバッグを有効化して、マネージド アプリからネイティブ コードをデバッグする方法について学習しました。In this tutorial, you learned how to debug native code from a managed app by enabling mixed-mode debugging. その他のデバッガー機能の概要については、次を参照してください。For an overview of other debugger features, see: