トレーニング
モジュール
Visual Studio Code デバッガーを使用して .NET アプリを対話形式でデバッグする - Training
Visual Studio Code を使用して .NET アプリを効率的にデバッグし、バグを迅速に修正する方法について学習します。 Visual Studio Code 内で対話型デバッガーを使用して、C# アプリケーションを分析し、修正します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
Visual Studio では、1 つのデバッグ セッションで複数のデバッガーの種類を有効にすることができます。これは混合モードのデバッグと呼ばれます。 このチュートリアルでは、1 つのデバッグ セッションで、マネージド コードとネイティブ コードの両方をデバッグすることを学習します。
このチュートリアルでは、マネージド アプリからネイティブ コードをデバッグする方法を示していますが、ネイティブ アプリからマネージド コードをデバッグすることもできます。 デバッガーは、Python とネイティブ コードなどの他の種類の混合モードのデバッグもサポートしており、ASP.NET などのアプリの種類ではスクリプト デバッガーの使用もサポートしています。
このチュートリアルでは、次の作業を行います。
Visual Studio がインストールされ、次のワークロードがある必要があります。
Visual Studio がインストールされ、次のワークロードがある必要があります。
Visual Studio をお持ちでない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。
Visual Studio はインストールされているが、必要なワークロードがない場合は、Visual Studio の [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウにある [Visual Studio インストーラーを開く] を選択します。 Visual Studio インストーラーで、必要なワークロードを選択し、 [変更] を選択します。
DLL プロジェクト用のファイルを作成するには:
Visual Studio を開き、プロジェクトを作成します。
Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「空のプロジェクト」と入力し、 [テンプレート] を選択してから、C++ 用の [空のプロジェクト] を選択します。 表示されたダイアログ ボックスで、 [作成] を選択します。 次に、Mixed_Mode_Debugging のような名前を入力して、 [作成] をクリックします。
[空のプロジェクト] プロジェクト テンプレートが表示されない場合は、 [ツール]>[ツールと機能を取得...] に移動して、Visual Studio インストーラーを開きます。 Visual Studio インストーラーが起動します。 [C++ によるデスクトップ開発] ワークロード、 [変更] の順に選択します。
Visual Studio によってプロジェクトが作成されます。
ソリューション エクスプローラーで、 [ソース ファイル] を選択し、 [プロジェクト]>[新しい項目の追加] の順に選択します。 または、 [ソース ファイル] を右クリックして、 [追加]>[新しい項目] の順に選択します。
すべての項目テンプレートが表示されない場合は、[すべてのテンプレートを表示] を選択します。
[新しい項目] ダイアログで、 [C++ ファイル (.cpp)] を選択します。 [名前] フィールドに「Mixed_Mode.cpp」を入力し、 [追加] を選択します。
Visual Studio によって新しい C++ ファイルがソリューション エクスプローラーに追加されます。
Mixed_Mode.cpp に次のコードをコピーします。
#include "Mixed_Mode.h"
ソリューション エクスプローラーで、 [ヘッダー ファイル] を選択し、 [プロジェクト]>[新しい項目の追加] の順に選択します。 または、 [ヘッダー ファイル] を右クリックして、 [追加]>[新しい項目] の順に選択します。
すべての項目テンプレートが表示されない場合は、[すべてのテンプレートを表示] を選択します。
[新しい項目] ダイアログで、 [ヘッダー ファイル (.h)] を選択します。 [名前] フィールドに「Mixed_Mode.h」を入力し、 [追加] を選択します。
Visual Studio によって新しいヘッダー ファイルがソリューション エクスプローラーに追加されます。
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
[ファイル]>[すべて保存] を選択するか、Ctrl+Shift+S キーを押してファイルを保存します。
DLL プロジェクトを構成してビルドするには:
Visual Studio ツールバーで、 [デバッグ] 構成を選択し、 [x86] または [x64] プラットフォームを選択します。 呼び出し元のアプリが常に 64 ビット モードで実行される .NET Core の場合は、プラットフォームとして [x64] を選択します。
ソリューション エクスプローラーで、 [Mixed_Mode_Debugging] プロジェクト ノードを選択し、 [プロパティ] アイコンを選択するか、プロジェクト ノードを右クリックして [プロパティ] を選択します。
[プロパティ] ウィンドウの上部で、 [構成] が [アクティブ (デバッグ)] に設定され、 [プラットフォーム] がツールバーで設定したプラットフォームと同じになっていることを確認します ( [x64] 、または x86 プラットフォームの場合は [Win32] )。
重要
プラットフォームを x86 から x64 (またはその逆) に切り替えた場合、新しいプラットフォーム用にプロパティを再構成する必要があります。
左側のウィンドウの [構成プロパティ] の下で、 [リンカー]>[詳細設定] の順に選択し、 [エントリポイントなし] の横のドロップダウンで [いいえ] を選択します。 [いいえ] に変更した場合は、 [適用] を選択します。
[構成プロパティ] の下で、 [全般] を選択し、 [構成の種類] の横にあるドロップダウンで [ダイナミック ライブラリ (.dll)] を選択します。 [適用] を選択し、 [OK] を選択します。
ソリューション エクスプローラーでプロジェクトを選択し、 [ビルド]>[ソリューションのビルド] の順に選択し、F7 キーを押すか、プロジェクトを右クリックして [ビルド] を選択します。
プロジェクトがエラーのない状態でビルドされます。
Visual Studio を起動し、新しいプロジェクトを作成します。
Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「コンソール」と入力し、 [テンプレート] を選択して、.NET Core 用の [コンソール アプリ] か、C# 用の [コンソール アプリ (.NET Framework)] を選択します。 表示されたダイアログ ボックスで、 [次へ] を選択します。
次に、「Mixed_Mode_Calling_App」のような名前を入力し、 [次へ] または [作成] をクリックします (いずれかのオプションを使用できます)。
.NET Core の場合は、推奨されるターゲット フレームワークまたは .NET 8 を選択し、 作成を選択します。
正しいプロジェクト テンプレートが表示されない場合は、 [ツール]>[ツールと機能を取得...] に移動して、Visual Studio インストーラーを開きます。 前提条件の説明に従って適切な .NET ワークロードを選択し、 [変更] を選択します。
注意
新しいマネージド プロジェクトを既存の C++ ソリューションに追加することもできます。 混合モードのデバッグタスクがより難しくなるよう、新しいソリューションでプロジェクトを作成しています。
Visual Studio によって空のプロジェクトが作成され、ソリューション エクスプローラーにファイルが表示されます。
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();
}
}
}
新しいコードで、[DllImport]
内のファイル パスを先ほど作成した Mixed_Mode_Debugging.dll への実際のファイル パスに置き換えます。 ヒントとしてコード コメントを参照してください。 プレースホルダー username を必ず置き換えてください。
[ファイル]>[Program.cs の保存] を選択するか、Ctrl+S キーを押してファイルを保存します。
ソリューション エクスプローラーで、 [Mixed_Mode_Calling_App] プロジェクト ノードを選択し、 [プロパティ] アイコンを選択するか、プロジェクト ノードを右クリックして [プロパティ] を選択します。
プロパティでネイティブ コードのデバッグを有効にします。
左側のウィンドウで [デバッグ] を選択し、 [デバッグ起動プロファイル UI を開く] を選択し、 [ネイティブ コードのデバッグを有効にする] チェック ボックスをオンにしてから、プロパティ ページを閉じて変更を保存します。
左側のウィンドウで [デバッグ] を選択し、 [ネイティブ コードのデバッグを有効にする] チェック ボックスをオンにしてから、プロパティ ページを閉じて変更を保存します。
.NET Framework アプリの x64 DLL をターゲットにしている場合は、プラットフォーム ターゲットを [すべての CPU] から x64 に変更します。 これを行うには、[デバッグ] ツール バーの [ソリューション プラットフォーム] ドロップダウンから [構成マネージャー] を選択します。 x64 に直接切り替えることができない場合は、x64 を対象とする新しい構成を作成します。
C# プロジェクトで Program.cs を開きます。 コードの次の行にブレークポイントを設定するには、余白の左端をクリックして行を選択し、F9 キーを押すか、行を右クリックして [ブレークポイント]>[ブレークポイントの挿入] の順に選択します。
int result = Multiply(7, 7);
左側の余白のブレークポイントを設定した場所に赤い円が表示されます。
F5 キーを押して、Visual Studio のツールバーで緑色の矢印を選択するか、 [デバッグ]>[デバッグの開始] の順に選択してデバッグを開始します。
設定したブレークポイントのところでデバッガーが一時停止します。 黄色の矢印は、デバッガーが現在一時停止している場所を示します。
マネージド アプリでデバッグが一時停止している間に、F11 キーを押すか、 [デバッグ]>[ステップ イン] の順に選択します。
Mixed_Mode.h ネイティブ ヘッダー ファイルが開き、デバッガーが一時停止されている場所に黄色の矢印が示されます。
これで、ブレークポイントを設定してそこにヒットしたら、ネイティブ コードまたはマネージド コード内の変数を検査できます。
ソース コード内の変数をポイントすると、その値が表示されます。
変数とその値は、 [自動変数] ウィンドウと [ローカル] ウィンドウで確認できます。
デバッガーで一時停止中に、ウォッチ ウィンドウと [呼び出し履歴] ウィンドウを使用することもできます。
もう一度 F11 キーを押して、デバッガーを 1 行進めます。
Shift+F11 キーを押すか、 [デバッグ]>[ステップ アウト] を選択して、マネージド アプリで実行を続行し、もう一度一時停止します。
F5 キーを押すか、緑色の矢印を選択してアプリのデバッグを続行します。
おめでとうございます! 混合モードのデバッグのチュートリアルを完了しました。
このチュートリアルでは、混合モード デバッグを有効化して、マネージド アプリからネイティブ コードをデバッグする方法について学習しました。 その他のデバッガー機能の概要については、次を参照してください。
トレーニング
モジュール
Visual Studio Code デバッガーを使用して .NET アプリを対話形式でデバッグする - Training
Visual Studio Code を使用して .NET アプリを効率的にデバッグし、バグを迅速に修正する方法について学習します。 Visual Studio Code 内で対話型デバッガーを使用して、C# アプリケーションを分析し、修正します。
ドキュメント
混合モードでのデバッグ (マネージド コードとネイティブ コード) - Visual Studio (Windows)
呼び出し元アプリのプロジェクトのプロパティ ページを使用して、Visual Studio で混合モードデバッグ (マネージド コードとネイティブ コードを一緒に) できるようにします。
ダイナミック リンク ライブラリ (DLL) のファイルとプロジェクトをデバッグする - Visual Studio (Windows)
Visual Studio でダイナミック リンク ライブラリ (DLL) ファイルをデバッグし、Visual Studio を使用して DLL の作成、ビルド、構成、デバッグを行います。
方法 : 混合モード アプリケーションをデバッグする - Visual Studio (Windows)
Visual Studio で、共通言語ランタイムで実行されるマネージド コードとネイティブ コードを組み合わせるアプリである混合モード アプリケーションをデバッグします。