VS Codeのエージェントモードを拡張するには、を試してください!

Microsoft C++ 用に VS Code を構成する

このチュートリアルでは、Visual Studio Code を構成して、Windows 上で Microsoft Visual C++ コンパイラとデバッガーを使用する方法を説明します。

VS Code を構成した後、簡単な Hello World プログラムを VS Code でコンパイルおよびデバッグします。このチュートリアルでは、Microsoft C++ ツールセットまたは C++ 言語の詳細については説明しません。これらの主題については、Web 上に多くの優れたリソースがあります。

問題が発生した場合は、遠慮なくVS Code ドキュメント リポジトリにこのチュートリアルの Issue を提出してください。

前提条件

このチュートリアルを正常に完了するには、次の操作を行う必要があります。

  1. Visual Studio Code をインストールします。

  2. VS Code 用 C/C++ 拡張機能をインストールします。C/C++ 拡張機能は、拡張機能ビュー (⇧⌘X (Windows、Linux Ctrl+Shift+X)) で 'c++' を検索してインストールできます。

    C/C++ extension

  3. Microsoft Visual C++ (MSVC) コンパイラ ツールセットをインストールします。

    Visual Studio の最近のバージョンをお持ちの場合は、Windows のスタート メニューから Visual Studio インストーラーを開き、C++ ワークロードがチェックされていることを確認します。インストールされていない場合は、チェックボックスをオンにしてインストーラーの変更ボタンを選択します。

    完全な Visual Studio IDE をインストールせずに、C++ によるデスクトップ開発ワークロードをインストールすることもできます。Visual Studio のダウンロードページから、すべてのダウンロードセクションの下にあるVisual Studio 用ツールが表示されるまでスクロールし、Build Tools for Visual Studio 2022 のダウンロードを選択します。

    Build Tools for Visual Studio download

    これにより Visual Studio インストーラーが起動し、利用可能な Visual Studio Build Tools ワークロードを示すダイアログが表示されます。C++ によるデスクトップ開発ワークロードをチェックし、インストールを選択します。

    Cpp build tools workload

注意: 有効な Visual Studio ライセンス (Community、Pro、または Enterprise のいずれか) がある限り、Visual Studio Build Tools の C++ ツールセットと Visual Studio Code を組み合わせて、任意の C++ コードを開発、ビルド、テストできます。

Microsoft Visual C++ のインストールを確認する

コマンドラインまたは VS Code から MSVC を使用するには、Visual Studio 用開発者コマンド プロンプトから実行する必要があります。PowerShell、Bash、Windows コマンド プロンプトなどの通常のシェルには、必要なパス環境変数が設定されていません。

VS 用開発者コマンド プロンプトを開くには、Windows のスタート メニューで 'developer' と入力し始めると、候補のリストに表示されます。正確な名前は、インストールされている Visual Studio または Visual Studio Build Tools のバージョンによって異なります。項目を選択してプロンプトを開きます。

Developer Command Prompt

C++ コンパイラ cl.exe が正しくインストールされているかテストするには、'cl' と入力すると、バージョンと基本的な使用説明が記載された著作権メッセージが表示されます。

Checking cl.exe installation

開発者コマンド プロンプトが BuildTools の場所を開始ディレクトリとして使用している場合 (そこにプロジェクトを置くことはお勧めしません)、新しいプロジェクトを作成し始める前にユーザー フォルダー (C:\users\{your username}\) に移動してください。

注意: 何らかの理由で開発者コマンド プロンプトから VS Code を実行できない場合、開発者コマンド プロンプト以外で VS Code を実行するで VS Code で C++ プロジェクトをビルドするための回避策を見つけることができます。

Hello World を作成する

開発者コマンド プロンプトから、すべての VS Code プロジェクトを保存できる「projects」という空のフォルダーを作成し、次に「helloworld」というサブフォルダーを作成し、そこに移動して、以下のコマンドを入力してそのフォルダー (.) で VS Code (code) を開きます。

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

「code .」コマンドは、現在の作業フォルダーで VS Code を開きます。これが「ワークスペース」になります。チュートリアルを進めていくと、ワークスペースの.vscodeフォルダーに3つのファイルが作成されることがわかります。

  • tasks.json (ビルド手順)
  • launch.json (デバッガー設定)
  • c_cpp_properties.json (コンパイラのパスと IntelliSense の設定)

ソースコード ファイルを追加する

ファイル エクスプローラーのタイトル バーで、新しいファイル ボタンを選択し、ファイル名をhelloworld.cppにします。

New File title bar button

Hello World のソースコードを追加する

このソースコードを貼り付けます。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}

ファイルを保存するには、⌘S (Windows、Linux Ctrl+S) を押します。VS Code のサイド バーにあるファイル エクスプローラービュー (⇧⌘E (Windows、Linux Ctrl+Shift+E)) に、追加したファイルが表示されることに注目してください。

File Explorer

メインのファイルメニューで自動保存をチェックして、ファイルの変更を自動的に保存する自動保存を有効にすることもできます。

一番左のアクティビティ バーでは、検索ソース管理実行などのさまざまなビューを開くことができます。このチュートリアルでは、後で実行ビューについて説明します。その他のビューについては、VS Code のユーザー インターフェイス ドキュメントを参照してください。

注意: C++ ファイルを保存または開くと、C/C++ 拡張機能から Insiders バージョンの利用可能性に関する通知が表示される場合があります。これは新しい機能や修正をテストできるものです。X (通知をクリア) を選択することで、この通知を無視できます。

IntelliSense を探索する

新しく作成したhelloworld.cppファイルで、vectorまたはstringにマウス ポインターを合わせると型情報が表示されます。msg変数の宣言後、メンバー関数を呼び出すときのようにmsg.と入力し始めます。すべてのメンバー関数を示す補完リストと、msgオブジェクトの型情報を示すウィンドウがすぐに表示されるはずです。

Statement completion IntelliSense

Tab キーを押して選択したメンバーを挿入できます。その後、開き括弧を追加すると、関数が必要とする引数に関する情報が表示されます。

helloworld.cpp を実行する

C++ 拡張機能は、マシンにインストールされている C++ コンパイラを使用してプログラムをビルドすることに注意してください。VS Code でhelloworld.cppを実行およびデバッグする前に、C++ コンパイラがインストールされていることを確認してください。

  1. helloworld.cpp をアクティブ ファイルとして開きます。

  2. エディターの右上隅にある再生ボタンを押します。

    Screenshot of helloworld.cpp and play button

  3. システムで検出されたコンパイラのリストから、C/C++: cl.exe アクティブ ファイルのビルドとデバッグを選択します。

    C++ debug configuration dropdown

helloworld.cpp を初めて実行するときにのみコンパイラを選択するように求められます。このコンパイラは、tasks.json ファイルで「デフォルト」コンパイラとして設定されます。

  1. ビルドが成功すると、プログラムの出力は統合ターミナルに表示されます。

    screenshot of program output

cl.exe を使用してビルドとデバッグを試行中にエラーが発生した場合は、code . ショートカットを使用して、Visual Studio 用開発者コマンド プロンプトから VS Code を起動したことを確認してください。

Error notification when trying to use MSVC without running VS Code from the Developer Command Prompt for VS

プログラムを初めて実行すると、C++ 拡張機能はtasks.jsonを作成します。これはプロジェクトの.vscodeフォルダーにあります。tasks.jsonにはビルド構成が格納されます。

新しいtasks.jsonファイルは以下の JSON のようになるはずです。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: cl.exe build active file",
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ]
}

注意: tasks.json の変数については、変数リファレンスで詳細を確認できます。

command 設定は実行するプログラムを指定します。この場合、「cl.exe」です。args 配列は、cl.exe に渡されるコマンドライン引数を指定します。これらの引数は、コンパイラが期待する順序で指定する必要があります。

このタスクは、C++ コンパイラにアクティブ ファイル (${file}) を受け取り、コンパイルし、現在のディレクトリ (${fileDirname}) に、アクティブ ファイルと同じ名前で.exe拡張子 (${fileBasenameNoExtension}.exe) を持つ実行可能ファイル (/Fe: スイッチ) を作成するように指示します。これにより、私たちの例ではhelloworld.exeが生成されます。

label の値はタスク リストに表示されるものです。好きなように名前を付けることができます。

detail の値は、タスク リストにおけるタスクの説明として表示されるものです。類似のタスクと区別するために、この値の名前を変更することを強くお勧めします。

problemMatcher の値は、コンパイラの出力内のエラーと警告を検出するために使用する出力パーサーを選択します。cl.exe の場合、$msCompile 問題マッチャーを使用すると最良の結果が得られます。

今後、再生ボタンはtasks.jsonから読み取って、プログラムのビルドと実行方法を決定します。tasks.jsonで複数のビルド タスクを定義でき、デフォルトとしてマークされているタスクが再生ボタンによって使用されます。デフォルトのコンパイラを変更する必要がある場合は、タスク: デフォルトのビルド タスクを構成を実行できます。あるいは、tasks.jsonファイルを変更し、このセグメントを置き換えることでデフォルトを削除できます。

    "group": {
        "kind": "build",
        "isDefault": true
    },

これで

    "group": "build",

tasks.json の変更

"${file}" の代わりに"${workspaceFolder}/*.cpp"のような引数を使用することで、複数の C++ ファイルをビルドするようにtasks.jsonを変更できます。これにより、現在のフォルダー内のすべての.cppファイルがビルドされます。また、"${fileDirname}\\${fileBasenameNoExtension}.exe"をハードコードされたファイル名 (たとえば、"${workspaceFolder}\\myProgram.exe") に置き換えることで、出力ファイル名を変更することもできます。

helloworld.cpp をデバッグする

コードをデバッグするには、

  1. helloworld.cpp に戻り、アクティブ ファイルにします。
  2. エディターのマージンをクリックするか、現在の行で F9 を使用してブレークポイントを設定します。 helloworld.cpp のブレークポイントのスクリーンショット
  3. 再生ボタンの横にあるドロップダウンから、C/C++ ファイルをデバッグを選択します。 再生ボタンのドロップダウンのスクリーンショット
  4. システムで検出されたコンパイラのリストから、C/C++: cl.exe アクティブ ファイルのビルドとデバッグを選択します (helloworld.cpp を初めて実行またはデバッグするときにのみコンパイラを選択するように求められます)。 C++ デバッグ構成ドロップダウン

再生ボタンには、C/C++ ファイルを実行C/C++ ファイルをデバッグの2つのモードがあります。最後に使用されたモードがデフォルトになります。再生ボタンにデバッグ アイコンが表示されている場合は、ドロップダウン メニュー項目を選択する代わりに、再生ボタンを選択してデバッグできます。

cl.exe を使用してビルドとデバッグを試行中にエラーが発生した場合は、code . ショートカットを使用して、Visual Studio 用開発者コマンド プロンプトから VS Code を起動したことを確認してください。

Error notification when trying to use MSVC without running VS Code from the Developer Command Prompt for VS

デバッガーを探索する

コードのステップ実行を開始する前に、ユーザーインターフェイスのいくつかの変更点に注目してみましょう。

  • 統合ターミナルはソースコード エディターの下部に表示されます。デバッグ出力タブには、デバッガーが起動して実行中であることを示す出力が表示されます。

  • エディターは、デバッガーを開始する前にブレークポイントを設定した行を強調表示します。

    Initial breakpoint

  • 左側の実行とデバッグビューにはデバッグ情報が表示されます。このチュートリアルで後ほど例を示します。

  • コード エディターの上部にデバッグ コントロール パネルが表示されます。左側のドットを掴んで画面上を移動させることができます。

    Debugging controls

コードをステップ実行する

これで、コードのステップ実行を開始する準備ができました。

  1. デバッグ コントロール パネルのステップ オーバー アイコンをクリックするか、押します。

    Step over button

    これにより、プログラムの実行は for ループの最初の行に進み、msg 変数が作成および初期化されるときに呼び出されるvectorおよびstringクラス内のすべての内部関数呼び出しをスキップします。左側の変数ウィンドウの変更に注目してください。

    Debugging windows

    この場合、ループの変数名はデバッガーに表示されますが、ステートメントはまだ実行されていないため、現時点では読み取るものがないため、エラーは予期されています。ただし、msg の内容は、そのステートメントが完了しているため表示されます。

  2. ステップ オーバーをもう一度押して、このプログラムの次のステートメントに進みます (ループを初期化するために実行されるすべての内部コードをスキップします)。これで、変数ウィンドウにはループ変数に関する情報が表示されます。

  3. ステップ オーバーをもう一度押して、cout ステートメントを実行します。(C++ 拡張機能は、ループが終了するまでデバッグ コンソールに出力を表示しないことに注意してください。)

  4. 必要であれば、ベクター内のすべての単語がコンソールに表示されるまでステップ オーバーを押し続けることができます。しかし、興味がある場合は、ステップ イン ボタンを押して C++ 標準ライブラリのソースコードをステップ実行してみてください!

    Breakpoint in gcc standard library header

    自分のコードに戻るには、ステップ オーバーを押し続ける方法があります。もう1つの方法は、コード エディターでhelloworld.cppタブに切り替え、ループ内のcoutステートメントのどこかに挿入点を置き、F9 を押してコードにブレークポイントを設定することです。左側のガターに赤い点が現れ、この行にブレークポイントが設定されたことを示します。

    Breakpoint in main

    次に、F5 を押して、標準ライブラリ ヘッダーの現在の行から実行を開始します。実行はcoutで中断されます。必要であれば、もう一度F9 を押してブレークポイントを解除できます。

ウォッチを設定する

プログラムの実行中に変数の値を追跡したい場合があります。これは、変数にウォッチを設定することで行えます。

  1. ループ内に挿入点を置きます。ウォッチウィンドウでプラス記号を選択し、テキストボックスにループ変数の名前であるwordと入力します。これで、ループをステップ実行しながらウォッチ ウィンドウを表示します。

    Watch window

  2. ループの前にint i = 0;というステートメントを追加して、別のウォッチを追加します。次に、ループ内に++i;というステートメントを追加します。前のステップで行ったように、i のウォッチを追加します。

  3. ブレークポイントで実行が一時停止している間に任意の変数の値をすばやく表示するには、マウス ポインターをその変数に重ねます。

    Mouse hover

launch.json を使用してデバッグをカスタマイズする

再生ボタンまたはF5 でデバッグすると、C++ 拡張機能は動的なデバッグ構成をその場で作成します。

実行時にプログラムに渡す引数を指定するなど、デバッグ構成をカスタマイズしたい場合があります。カスタム デバッグ構成はlaunch.jsonファイルで定義できます。

launch.json を作成するには、再生ボタンのドロップダウン メニューからデバッグ構成の追加を選択します。

Add debug configuration play button menu

すると、さまざまな事前定義されたデバッグ構成のドロップダウンが表示されます。C/C++: cl.exe アクティブ ファイルのビルドとデバッグを選択します。

C++ debug configuration dropdown

VS Code はlaunch.jsonファイルを作成します。これは次のようになります。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++: cl.exe build and debug active file",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "preLaunchTask": "C/C++: cl.exe build active file"
    }
  ]
}

上記の JSON では、program がデバッグしたいプログラムを指定します。ここでは、アクティブなファイルのフォルダー (${fileDirname}) と.exe拡張子 (${fileBasenameNoExtension}.exe) を持つアクティブなファイル名に設定されており、helloworld.cppがアクティブなファイルの場合、helloworld.exeになります。argsプロパティは、実行時にプログラムに渡す引数の配列です。

デフォルトでは、C++ 拡張機能はソースコードにブレークポイントを追加せず、stopAtEntry の値はfalseに設定されています。

デバッグを開始したときにデバッガーがmainメソッドで停止するように、stopAtEntry の値をtrueに変更します。

今後、再生ボタンとF5 は、デバッグのためにプログラムを起動する際にlaunch.jsonファイルから読み込みます。

C/C++ の構成

C/C++ 拡張機能をより細かく制御したい場合は、c_cpp_properties.json ファイルを作成できます。これにより、コンパイラへのパス、インクルード パス、C++ 標準 (デフォルトは C++17) などの設定を変更できます。

コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からC/C++: 構成の編集 (UI) コマンドを実行することで、C/C++ 構成 UI を表示できます。

Command Palette

これにより、C/C++ 構成ページが開きます。ここで変更を加えると、VS Code はそれらを.vscodeフォルダー内のc_cpp_properties.jsonというファイルに書き込みます。

Command Palette

Visual Studio Code はこれらの設定を.vscode\c_cpp_properties.jsonに配置します。このファイルを直接開くと、次のようになるはずです。

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "windowsSdkVersion": "10.0.18362.0",
      "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "msvc-x64"
    }
  ],
  "version": 4
}

プログラムに、ワークスペース内または標準ライブラリのパスにないヘッダー ファイルが含まれている場合にのみ、インクルード パス配列の設定に追加する必要があります。

コンパイラのパス

compilerPath 設定は、構成における重要な設定です。拡張機能はこれを使用して、C++ 標準ライブラリ ヘッダー ファイルへのパスを推測します。拡張機能がこれらのファイルの場所を把握している場合、スマートな補完や定義へ移動ナビゲーションなどの便利な機能を提供できます。

C/C++ 拡張機能は、システムで見つかったものに基づいて、デフォルトのコンパイラの場所でcompilerPathを自動的に入力しようとします。この拡張機能は、いくつかの一般的なコンパイラの場所を検索します。

compilerPath の検索順序は次のとおりです。

  • まず Microsoft Visual C++ コンパイラをチェックします
  • 次に Windows Subsystem for Linux (WSL) で g++ を探します
  • 次に Mingw-w64 用 g++。

g++ または WSL がインストールされている場合、プロジェクトの推奨コンパイラと一致するようにcompilerPathを変更する必要があるかもしれません。Microsoft C++ の場合、パスはインストールされている特定のバージョンによって異なりますが、"C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe" のようになります。

C++ 構成を再利用する

VS Code は Microsoft C++ コンパイラを使用するように構成されました。この構成は現在のワークスペースに適用されます。構成を再利用するには、JSON ファイルを新しいプロジェクト フォルダー (ワークスペース) の.vscodeフォルダーにコピーし、必要に応じてソース ファイルと実行可能ファイルの名前を変更するだけです。

開発者コマンド プロンプト以外で VS Code を実行する

特定の状況では、Visual Studio 用開発者コマンド プロンプトから VS Code を実行できない場合があります (たとえば、SSH を介したリモート開発シナリオ)。その場合、次のtasks.json構成を使用して、ビルド中にVisual Studio 用開発者コマンド プロンプトの初期化を自動化できます。

{
  "version": "2.0.0",
  "windows": {
    "options": {
      "shell": {
        "executable": "cmd.exe",
        "args": [
          "/C",
          // The path to VsDevCmd.bat depends on the version of Visual Studio you have installed.
          "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"",
          "&&"
        ]
      }
    }
  },
  "tasks": [
    {
      "type": "shell",
      "label": "cl.exe build active file",
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

注意: VsDevCmd.bat へのパスは、Visual Studio のバージョンまたはインストール パスによって異なる場合があります。コマンド プロンプトを開き、dir "\VsDevCmd*" /s を実行することで、VsDevCmd.bat へのパスを見つけることができます。

トラブルシューティング

「cl.exe」が認識されない

「The term 'cl.exe' is not recognized as the name of a cmdlet, function, script file, or operable program.」というエラーが表示される場合、これは通常、Visual Studio 用開発者コマンド プロンプト以外で VS Code を実行しており、VS Code がcl.exeコンパイラへのパスを知らないことを意味します。

VS Code は Visual Studio 用開発者コマンド プロンプトから起動するか、タスクを開発者コマンド プロンプト以外で実行するように構成する必要があります。

新しいターミナル (⌃⇧` (Windows、Linux Ctrl+Shift+`)) を開いて 'cl' と入力し、VS Code でcl.exeが利用可能であることを確認することで、VS Code が開発者コマンド プロンプトのコンテキストで実行されていることを常に確認できます。

致命的なエラー C1034: assert.h: インクルード パスが設定されていません

この場合、cl.exePATH環境変数を通じて VS Code で利用できますが、VS Code は依然としてVisual Studio 用開発者コマンド プロンプトから起動するか、開発者コマンド プロンプト以外で実行するように構成する必要があります。そうしないと、cl.exeINCLUDEなどの重要な環境変数にアクセスできません。

次のステップ

  • VS Code ユーザー ガイドを参照してください。
  • C++ 拡張機能の概要を確認してください。
  • 新しいワークスペースを作成し、.vscode JSON ファイルをコピーし、新しいワークスペースのパス、プログラム名などに必要な設定を調整して、コーディングを開始しましょう!