VS CodeでC/C++デバッグできない?launch.json「gcc.exe build and debug active file」エラーの直し方

Visual Studio Code(VS Code)でC/C++をデバッグしようとしたときに、「Configuration “C/C++: gcc.exe build and debug active file” is missing in “launch.json”」と出てF5が失敗する原因の多くは、launch.jsonに“その名前のデバッグ構成が存在しない(または名前が一致していない)ことです。この記事では、Windows環境を中心に、launch.json / tasks.json を正しく作ってエラーを確実に解消する手順をまとめます。

目次

このエラーが意味していること

エラーメッセージをそのまま分解すると、VS Codeは「C/C++: gcc.exe build and debug active file」という名前のデバッグ構成を探しています。しかし、あなたのlaunch.json の configurations の中に、その name が見つからないため、起動できずに止まっています。

VS Codeがやろうとしていること失敗している理由解決の方向性
launch.json の configurations から「指定された名前」の構成を選んでデバッグ開始launch.json が未作成 / nameが違う / 構成が削除された / フォルダを開いていないlaunch.json に name を一致させて作る(必要なら tasks.json も作る)

つまり、原因は「難しいデバッガーの不具合」ではなく、設定ファイルの“名前の一致”問題であるケースがほとんどです。

最初に確認する前提条件(gcc と gdb が動くか)

launch.json を正しく書いても、そもそも環境に gcc(コンパイラ)とgdb(デバッガ)が無い/PATHが通っていないとデバッグは始まりません。まずはターミナル(PowerShell / コマンドプロンプト)で確認します。

gcc --version
gdb --version

Windowsでよくある構成は次のいずれかです。

方式特徴チェックのコツ
MinGW-w64シンプルにWindows上でgcc/gdbを使うwhere gcc / where gdb で実体パスを確認
MSYS2パッケージ管理が楽で更新もしやすいVS CodeはWindows側なので、gdb.exe のフルパスが重要
WSL(Ubuntuなど)Linux環境でビルド・デバッグ(パスがLinux形式)Remote-WSL利用時は /usr/bin/gdb など

もし 「コマンドが見つかりません」 になるなら、インストールまたはPATHが未設定です。ここを直さない限り、launch.json を整えても先に進めません。

VS Codeに必要な拡張機能(C/C++)

デバッグ構成「C/C++: gcc.exe build and debug active file」は、基本的に Microsoft の C/C++ 拡張機能(通称 cpptools)を前提にしています。

  • 拡張機能ビューで 「C/C++(Microsoft)」 をインストール
  • 既に入っている場合は、一度 無効化→有効化、または再起動で認識が戻ることがあります

拡張機能が無い/壊れていると、そもそもテンプレート生成やデバッグタイプ(cppdbg)が正しく動きません。

launch.json を正しく作る

もっとも確実なのは、VS Code のUIから生成して、その後に内容を調整する方法です。

  • 対象のフォルダー(プロジェクト)を開く(重要:ファイル単体ではなくフォルダー)
  • 左の「実行とデバッグ」(虫+再生アイコン)を開く
  • 「launch.json ファイルを作成」→「C++ (GDB/LLDB)」を選ぶ
  • 候補に「C/C++: gcc.exe build and debug active file」が出たらそれを選ぶ

ただし、環境によっては候補が出なかったり、別名(g++.exe など)で生成されたりします。その場合は、エラーに出ている name と完全一致する構成を手動で用意すればOKです。

コピペで作れる launch.json(Windows / gcc + gdb)

ワークスペース直下に .vscode フォルダーを作り、その中に launch.json を作成して以下を入れます。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++: gcc.exe build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
      "preLaunchTask": "C/C++: gcc.exe build active file",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

最重要ポイントは次の2つです。

  • name がエラーメッセージの文字列と完全一致していること(1文字でも違うと同じエラーになります)
  • miDebuggerPath は自分のPCにある gdb.exe の実パスに直すこと(例のままでは動きません)

gdb.exe の場所が分からない場合は、Windowsなら次で目安を取れます。

where gdb
where gcc

出てきたパスを、launch.json の miDebuggerPath にそのまま入れてください(バックスラッシュは JSON なので \\ にします)。

launch.json の項目をどこまで直せばいいか

よく調整が必要になる項目を表にまとめます。

項目役割ここを間違えると起きやすい症状調整のコツ
nameデバッグ構成の識別名今回の「missing in launch.json」エラーに出ている名前と完全一致
programデバッグする実行ファイル起動できない / ファイルが見つからないビルド成果物の場所に合わせる(buildフォルダ出力ならそこへ)
miDebuggerPathgdb.exe の場所gdb が起動できない / MIEngineエラーフルパス指定が確実(PATH依存を減らす)
preLaunchTaskデバッグ前に実行するビルドタスクタスクが見つからない / ビルドされないtasks.json の label と完全一致
cwd実行時の作業フォルダ相対パスで読み込むファイルが見つからない基本は ${workspaceFolder} でOK

tasks.json を用意する(preLaunchTask の受け皿)

launch.json で preLaunchTask を指定した場合、同じ名前のビルドタスクが tasks.json に必要です。これが無いと、F5で「タスクが見つからない」系のエラーに派生します。

UIから作るなら次の手順が確実です。

  • VS Code メニュー「ターミナル」→「既定のビルド タスクの構成」
  • 候補から「C/C++: gcc.exe build active file」を選ぶ
  • .vscode/tasks.json が生成される

コピペで作れる tasks.json(アクティブファイルをgccでビルド)

自動生成がうまくいかない場合は、.vscode/tasks.json を手で作って以下を入れてください。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: gcc.exe build active file",
      "command": "gcc",
      "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe"
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Build active file with gcc"
    }
  ]
}

ここでも重要なのは、次の一致です。

  • launch.json の preLaunchTask:C/C++: gcc.exe build active file
  • tasks.json の label:C/C++: gcc.exe build active file

スペース、記号、大小文字の違いも含めて完全一致させてください。

C++(.cpp)を扱うなら g++ のタスクが安全

.cpp を gcc でコンパイルすると、標準ライブラリのリンクでハマることがあります(環境次第で通ることもありますが、安定しません)。C++をメインにするなら g++ に切り替えるのが無難です。

その場合は tasks.json をこうします(label を変えるなら、launch.json の preLaunchTask も同名に変更)。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++.exe build active file",
      "command": "g++",
      "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe"
      ],
      "options": { "cwd": "${fileDirname}" },
      "problemMatcher": ["$gcc"],
      "group": { "kind": "build", "isDefault": true }
    }
  ]
}

そして launch.json 側の name も g++ に合わせると、混乱が減ります。ただし今回のエラーを最短で消すなら、まずはエラー文に出ている name を一致させるのが優先です。

F5でデバッグを開始する手順

  • デバッグしたい .c / .cpp ファイルを開く
  • 行番号の左をクリックしてブレークポイントを置く
  • 「実行とデバッグ」画面上部の構成ドロップダウンで、C/C++: gcc.exe build and debug active file を選ぶ
  • F5 を押す(ビルド→起動→停止が流れる)

ここで、起動時にターミナルへコンパイルログが出て、成功後にデバッグが始まればOKです。

まだ直らない場合に見るべきチェックリスト

「手順通りに作ったのにF5が失敗する」場合、原因はだいたい次のどれかに収束します。上から順に潰すと早いです。

name が一致していない

  • launch.json の configurations[].name が C/C++: gcc.exe build and debug active file になっているか
  • ダブルクォート内のスペースや記号も含めて一致しているか

この一致が崩れると、まさに今回のエラーが出ます。

preLaunchTask と label が一致していない

タスク名の不一致は非常に多い落とし穴です。次が一致しているか必ず確認してください。

  • launch.json の preLaunchTask
  • tasks.json の label

gdb のパスが違う(または起動できない)

デバッグコンソールに次のような雰囲気の文言が出ていたら、gdb の場所・実行権・整合性が怪しいです。

  • miDebuggerPath が無効
  • gdb を起動できない
  • Cannot find … gdb.exe

対策としては、次が効果的です。

  • where gdb で見つかったパスを miDebuggerPath に入れる
  • gcc と gdb を同じツールチェーンで揃える(MinGWのgccなのに別系統のgdb、などを避ける)
  • 32bit/64bitが極端に噛み合っていない場合は、ツールチェーンを統一する

program(実行ファイル)が期待する場所に無い

たとえば tasks.json で出力先を変えているのに、launch.json は「ファイルと同じ場所に exe がある前提」になっている、というズレです。

例:ビルド結果を build フォルダに出すなら、launch.json の program も合わせます。

"program": "${workspaceFolder}\\build\\app.exe"

そして tasks.json の -o も同じ場所へ。

"-o",
"${workspaceFolder}\\build\\app.exe"

フォルダーではなく「単体ファイル」を開いている

VS Codeは、ワークスペース(フォルダー)を開いていないと .vscode を正しく扱えず、設定ファイルが意図した場所に作られないことがあります。

  • エクスプローラーにプロジェクトのフォルダー構造が表示されているか
  • .vscode/launch.json と .vscode/tasks.json がそのフォルダー配下にあるか

「C/C++をビルド」と「C/C++をデバッグ」を混同している

F5はデバッグ起動ですが、その前に preLaunchTask(ビルド)が走ります。ビルドが失敗していれば当然デバッグも開始できません。F5を押した直後にターミナルを見て、コンパイルエラーが出ていないかを確認してください。

複数ファイルのプロジェクトで起きやすい落とし穴

「build active file」は開いている1ファイルだけをビルドする想定です。プロジェクトが複数の .c / .cpp を持つ場合、リンクに必要な他ファイルが含まれず、ビルドが失敗しやすくなります。

複数ファイルなら、tasks.json を「全ファイルをまとめてビルドする」形に変えるのが王道です。例として、src配下の2ファイルをまとめるケースを示します。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build: app",
      "type": "shell",
      "command": "g++",
      "args": [
        "-g",
        "${workspaceFolder}\\src\\main.cpp",
        "${workspaceFolder}\\src\\util.cpp",
        "-o",
        "${workspaceFolder}\\build\\app.exe"
      ],
      "options": { "cwd": "${workspaceFolder}" },
      "problemMatcher": ["$gcc"],
      "group": { "kind": "build", "isDefault": true }
    }
  ]
}

これに合わせて launch.json は次のようにします。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug: app",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}\\build\\app.exe",
      "cwd": "${workspaceFolder}",
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
      "preLaunchTask": "build: app",
      "stopAtEntry": false,
      "externalConsole": false
    }
  ]
}

「アクティブファイル」方式から一段進めるだけで、プロジェクトとしての安定度が一気に上がります。

WSLやリモート環境での注意点

Remote-WSL などで Linux 側の gcc/gdb を使う場合、パスやコマンドがWindows前提のままだと動きません。典型的には次の差が出ます。

項目Windows(例)WSL/Linux(例)
gdb の場所C:\\...\\gdb.exe/usr/bin/gdb
実行ファイルapp.exeapp(拡張子なしが多い)
パス区切り\\/

WSL向けの最小例(イメージ)は次の通りです。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug (WSL): active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}",
      "cwd": "${workspaceFolder}",
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/gdb",
      "preLaunchTask": "build (WSL): active file"
    }
  ]
}

Remote-WSL を使う場合は「VS CodeのウィンドウがWSL側に接続されているか」も重要です。Windows側のウィンドウでLinuxパスを指定しても噛み合いません。

デバッグが動いた後に快適にする小技

エラーが消えてデバッグが動き始めたら、次の設定を入れておくと実務で楽になります。

引数を渡す

"args": ["--input", "sample.txt"]

環境変数を設定する

"environment": [
  { "name": "APP_ENV", "value": "dev" }
]

コンソール表示を切り替える

標準入力を使うプログラムなら、統合ターミナルで動かすとトラブルが減ります。

"externalConsole": false

挙動が合わない場合は true にして外部コンソール起動を試すのも手です(環境によっては外部の方が入力しやすい場合があります)。

よくある症状別の早見表

症状原因の候補最短の対処
Configuration “…” is missing in launch.jsonlaunch.json にその name が無いname を完全一致で追加する
タスクが見つからないpreLaunchTask と tasks.json の label が違う文字列を完全一致させる
gdb が起動できないmiDebuggerPath が誤り / PATH未設定where gdb で実パスを入れる
起動ファイルが見つからないprogram が成果物の場所とズレているビルド出力先に合わせて program を修正
複数ファイルでリンクエラーactive file 方式で他ファイルが未リンクプロジェクト全体をビルドするタスクに変更

まとめ:最優先は「名前の一致」と「ビルドとデバッグの接続」

「Configuration “C/C++: gcc.exe build and debug active file” is missing in “launch.json”」は、VS Code が探しているデバッグ構成名がlaunch.jsonに存在しないことを示す、非常にストレートなエラーです。次の3点を押さえるだけで、ほとんどのケースは解消します。

  • launch.json の name をエラー文と完全一致させる
  • preLaunchTask と tasks.json の label を完全一致させる
  • gcc/gdb の導入とパス(特に miDebuggerPath)を現環境に合わせる

一度正しく動けば、以降は program の出力先を整理したり、複数ファイル対応のビルドへ移行したりして、VS Code を快適なC/C++開発環境に育てていけます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次