次の方法で共有


チュートリアル: 同じデバッグ セッションで C# と C++ をデバッグする

Visual Studio では、混合モード デバッグと呼ばれるデバッグ セッションで複数の種類のデバッガーを有効にすることができます。 このチュートリアルでは、単一のデバッグ セッションでマネージド コードとネイティブ コードの両方をデバッグする方法について説明します。

このチュートリアルでは、マネージド アプリからネイティブ コードをデバッグする方法を示しますが、 ネイティブ アプリからマネージド コードをデバッグすることもできます。 デバッガーでは、 Python やネイティブ コードのデバッグ、ASP.NET などのアプリの種類でのスクリプト デバッガーの使用など、他の種類の混合モード デバッグもサポートしています。

このチュートリアルでは、次の操作を行います。

  • 単純なネイティブ DLL を作成する
  • DLL を呼び出す単純な .NET Core または .NET Framework アプリを作成する
  • 混合モード デバッグを構成する
  • デバッガーを起動する
  • マネージド アプリでブレークポイントに到達する
  • ネイティブ コードにステップ インする

前提条件

次のワークロードで Visual Studio がインストールされている必要があります。

  • C++ を使用したデスクトップ開発
  • .NET デスクトップ開発

次のワークロードで Visual Studio がインストールされている必要があります。

  • C++ を使用したデスクトップ開発
  • 作成 するアプリの種類に応じて、 .NET デスクトップ開発または .NET Core クロス プラットフォーム開発

Visual Studio をお持ちでない場合は、Visual Studio のダウンロード ページに移動して無料でインストールしてください。

Visual Studio がインストールされていても、必要なワークロードがない場合は、Visual Studio の [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで [Visual Studio インストーラーを開く] を選択します。 Visual Studio インストーラーで、必要なワークロードを選択し、[ 変更] を選択します。

単純なネイティブ DLL を作成する

DLL プロジェクトのファイルを作成するには:

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

    Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「空のプロジェクト」と入力し、C++ の空のプロジェクトを選択します。 表示される [ 新しいプロジェクトの構成 ] ダイアログ ボックスで、 Mixed_Mode_Debugging などの名前を入力し、[ 作成] をクリックします。

    Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「空のプロジェクト」と入力し、[テンプレート] を選択してから、[C++ の空のプロジェクト] を選択します。 表示されたダイアログボックスで、を選び、を作成します。 次に、 Mixed_Mode_Debugging などの名前を入力し、[ 作成] をクリックします。

    空のプロジェクト プロジェクト テンプレートが表示されない場合は、[ツール>Get Tools and Features...] に移動し、Visual Studio インストーラーを開きます。 Visual Studio インストーラーが起動します。 [C++ によるデスクトップ開発] ワークロードを選択し、[変更] を選択します

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

  2. ソリューション エクスプローラーで[ソース ファイル]、[プロジェクト]、[新しい項目の追加>の順に選択します。 または、[ ソース ファイル ] を右クリックし、[ 追加>新しいアイテム] を選択します。

    すべての項目テンプレートが表示されない場合は、[すべてのテンプレートの表示] を選択します。

  3. [ 新しい項目] ダイアログで、 C++ ファイル (.cpp) を選択します。 [名前] フィールドに「Mixed_Mode.cpp」と入力し、[追加] を選択します。

    Visual Studio によって、ソリューション エクスプローラーに新しい C++ ファイルが追加 されます

  4. 次のコードを Mixed_Mode.cppにコピーします。

    #include "Mixed_Mode.h"
    
  5. ソリューション エクスプローラーで、[ヘッダー ファイル] を選択し、[プロジェクト] > [新しい項目の追加] を選択します。 または、[ ヘッダー ファイル ] を右クリックし、[ 追加>新しいアイテム] を選択します。

    すべての項目テンプレートが表示されない場合は、[すべてのテンプレートの表示] を選択します。

  6. [ 新しい項目] ダイアログで、[ ヘッダー ファイル (.h)] を選択します。 [名前] フィールドに「Mixed_Mode.h」と入力し、[追加] を選択します。

    Visual Studio によって、 ソリューション エクスプローラーに新しいヘッダー ファイルが追加されます。

  7. 次のコードを 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
    
  8. [ファイル>すべて保存] を選択するか、Ctrl+Shift+S キーを押してファイルを保存します。

DLL プロジェクトを構成してビルドするには:

  1. Visual Studio ツール バーで、[ デバッグ 構成] と [ x86 または x64 プラットフォーム] を選択します。 呼び出し元アプリが .NET Core で、常に 64 ビット モードで実行される場合は、プラットフォームとして x64 を選択します。

  2. ソリューション エクスプローラーでMixed_Mode_Debugging プロジェクト ノードを選択し、[プロパティ] アイコンを選択するか、プロジェクト ノードを右クリックして [プロパティ] を選択します。

  3. [プロパティ] ウィンドウの上部で、構成Active (Debug) に設定されており、プラットフォームがツール バーで設定した内容 (x64、または x86 プラットフォームの Win32) と同じであることを確認します。

    重要

    プラットフォームを x86 から x64 またはその逆に切り替える場合は、新しいプラットフォームのプロパティを再構成する必要があります。

  4. 左側のウィンドウの [構成プロパティ ] で、[ リンカー>Advanced] を選択し、[ エントリ ポイントなし] の横にあるドロップダウンで [ いいえ] を選択します。 [いいえ] に変更する必要がある場合は、[適用] を選択します。

  5. [ 構成プロパティ] で [ 全般] を選択し、[ 構成の種類] の横にあるドロップダウンで、[ 動的ライブラリ (.dll)] を選択します。 [Apply]\(適用\) を選択し、次に [OK] を選択します。

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

  6. ソリューション エクスプローラーでプロジェクトを選択し、[ビルド>ソリューションのビルド] を選択するか、F7 キーを押すか、プロジェクトを右クリックして [ビルド] を選択します。

    プロジェクトはエラーなしでビルドする必要があります。

DLL を呼び出す単純なマネージド アプリを作成する

  1. Visual Studio を開き、新しいプロジェクトを作成します。

    Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「コンソール」と入力し、.NET または .NET Framework 用の C# コンソール アプリを選択します。

    Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「コンソール」と入力し、[テンプレート] を選択してから、[.NET Core 用コンソール アプリ] または [C# 用コンソール アプリ (.NET Framework)] を選択します。 表示されたダイアログ ボックスで、[ 次へ] を選択します。

    次に、 Mixed_Mode_Calling_App などの名前を入力し、[ 次へ ] または [作成] をクリックします。どちらのオプションでも使用できます。

    .NET Core または .NET 5 以降の場合は、推奨されるターゲット フレームワークまたは .NET 8 を選択し、[ 作成] を選択します。

    正しいプロジェクト テンプレートが表示されない場合は、[ ツール>Get Tools and Features...] に移動し、Visual Studio インストーラーを開きます。 前提条件の説明に従って適切な .NET ワークロードを選択し、[ 変更] を選択します。

    新しいマネージド プロジェクトを既存の C++ ソリューションに追加することもできます。 混合モードデバッグ タスクをより困難にするために、新しいソリューションでプロジェクトを作成しています。

    Visual Studio によって空のプロジェクトが作成され、 ソリューション エクスプローラーに表示されます。

  2. Program.cs内のすべてのコードを次のコードに置き換えます。

    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 へのファイル パスに置き換えます。 ヒントについては、コード コメントを参照してください。 ユーザー名のプレースホルダーは必ず置き換えてください。

  4. [ファイル>保存] Program.csを選択するか、Ctrl+Sキーを押してファイルを保存します。

混合モード デバッグを構成する

  1. ソリューション エクスプローラーでMixed_Mode_Calling_App プロジェクト ノードを選択し、[プロパティ] アイコンを選択するか、プロジェクト ノードを右クリックして [プロパティ] を選択します。

  2. プロパティでネイティブ コードデバッグを有効にします。

    .NET コード

    左側のウィンドウで [ デバッグ ] を選択し、[ デバッグ起動プロファイル UI を開く] を選択し、[ ネイティブ コード デバッグを有効にする ] チェック ボックスをオンにして、プロパティ ページを閉じて変更を保存します。

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

    .NET Framework のコード

    左側のメニューで、デバッグを選択します。 次に、[ デバッガー エンジン ] セクションで[ ネイティブ コード デバッグを有効にする ] プロパティを選択し、プロパティ ページを閉じて変更を保存します。

    左側のウィンドウで [ デバッグ ] を選択し、[ ネイティブ コードデバッグを有効にする ] チェック ボックスをオンにして、プロパティ ページを閉じて変更を保存します。

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

  3. .NET Framework アプリから x64 DLL をターゲットとしている場合は、プラットフォームターゲットを 任意の CPU から x64 に変更します。 これを行うには、デバッグ ツール バーの [ソリューション プラットフォーム] ドロップダウンから Configuration Manager を選択することが必要な場合があります。 次に、x64 に直接切り替えることができない場合は、x64 を対象とする 新しい 構成を作成します。

ブレークポイントを設定してデバッグを開始する

  1. C# プロジェクトで、 Program.csを開きます。 次のコード行にブレークポイントを設定するには、左端の余白をクリックし、行を選択して F9 キーを押すか、行を右クリックして [ ブレークポイント>ブレークポイントを挿入します。

    int result = Multiply(7, 7);
    

    ブレークポイントを設定した左余白に赤い円が表示されます。

  2. F5 キーを押し、Visual Studio ツール バーの緑色の矢印を選択するか、デバッグ>デバッグの開始を選択してデバッグを開始します。

    デバッガーは、設定したブレークポイントで一時停止します。 黄色の矢印は、デバッガーが現在一時停止されている場所を示します。

ネイティブ コードのステップ インとステップ アウト

  1. マネージド アプリでデバッグが一時停止している間に F11 キーを押すか、 デバッグ>Step Into を選択します。

    Mixed_Mode.h ネイティブ ヘッダー ファイルが開き、デバッガーが一時停止されている黄色の矢印が表示されます。

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

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

  2. これで、ネイティブ コードまたはマネージド コード内でブレークポイントを設定して通過し、変数を検査できるようになりました。

    • ソース コード内の変数にカーソルを合わせると、その値が表示されます。

    • [自動変数] ウィンドウと [ローカル] ウィンドウで変数とその値を調べます。

    • デバッガーで一時停止中は、[ ウォッチ ] ウィンドウと [呼び出し履歴 ] ウィンドウを使用することもできます。

  3. もう一度 F11 キーを押して、デバッガーを 1 行進めます。

  4. Shift+F11 キーを押すか、デバッグ>Step Out を選択して実行を続行し、マネージド アプリでもう一度一時停止します。

  5. F5 キーを押すか、緑色の矢印を選択してアプリのデバッグを続行します。

おめでとうございます! 混合モード デバッグに関するチュートリアルを完了しました。

次のステップ

このチュートリアルでは、混合モードデバッグを有効にして、マネージド アプリからネイティブ コードをデバッグする方法について説明しました。 その他のデバッガー機能の概要については、次を参照してください。