【初心者向けに解説】Visual Studio CodeでC言語/C++のデバッグ方法

[記事内には広告が含まれています]

こんにちは、現役エンジニアの inno_tech です。

無料のエディタのVisual Studio Code(VS Code)ですが、実はデバッグ機能があることをご存じでしょうか?

今回はVisual Studio Codeを使用してC言語(C++)でデバッグ実行を行う方法を説明します。

本記事を見れば、プログラムをステップ実行したり、変数の値を確認したりといったデバッグ作業をVSCode上でできるようになりますよ。

大前提としてC言語開発に必要なコンパイラ(gcc)はインストール済みビルドの準備ができているものとして説明します。
まだ準備できていない方はこちらの記事を先に読んでください。

あわせて読みたい
【初心者向け解説】C言語 開発環境構築(C++も対応) Linux上でC言語の開発環境を構築する方法をお探しでしょうか? 本記事ではLinux上でC言語の開発環境を構築し、MakeFileでビルドするまでの手順をまとめています。 MakeF...

※本記事は、Ubuntu 20.04LTSの場合を例に説明しています。

もくじ

Visual Studio Code 側の準備

 Visual Studio Codeのインストールは、こちらの記事を参照してください。

あわせて読みたい
【速習】Visual Studio Code インストール方法まとめ(Ubuntu 20.04LTS) Visual Studio Code(通称VSCode) のインストール方法をお探しでしょうか? 本記事では、VSCodeのインストール方法を詳しくまとめています。コマンドライン、GUIの両方に...

拡張機能 C/C++ Extension Pack のインストール

Visual Studio CodeでC/C++を扱うためには、拡張機能を使用します。

拡張機能メニュー(Ctrl + Shift + X )から「C/C++ Extension Pack」を検索し、インストールしてください。
なお、拡張機能のインストール方法については、こちらの記事で詳しく紹介しています。

あわせて読みたい
【1分で解説】Visual Studio Codeの拡張機能をコマンドラインでインストール Visual Studio Codeの拡張機能(extension)をコマンドラインでインストールする方法をお探しでしょうか? 本記事を読めば、コマンドラインからVSCodeのインストールがで...
VSCode拡張機能 | C/C++ Extension Pack
VSCode拡張機能 | C/C++ Extension Pack

拡張機能がインストール出来たら、次のステップに進んでください。

launch.jsonファイルの作成

開発したプログラムをデバッグ実行するため、launch.json というファイルを作成します。

launch.jsonVS Code用の設定ファイルです。VS Codeから実行するプログラムのパスや引数といった設定を記述します。

launch.jsonの作成手順

早速、launch.jsonの作成方法を説明します。
まず、デバッグメニュー(Ctrl + Shift + D)を開き、「launch.jsonファイルを作成します。」と表示されている部分をクリックします。

VS Code | デバッグメニュー
VS Code | デバッグメニュー

すると、画面の上部にコマンドパレットが開き、いくつかの候補が表示されます。
その中から、「C++(GDB/LLDB)」 を選択します。

VS Code | 環境の選択
VS Code | 環境の選択

この操作によって、「.vscode」直下にC/C++用のlaunch.json が自動生成されます。

VS Code | launch.jsonテンプレート生成
VS Code | launch.jsonテンプレート生成

まだテンプレートを自動生成した段階です。ここから自分のプログラム用に編集を加えていきます。

launch.jsonの編集とデバッグ実行

launch.json内の"program" キー の部分を 実行したいプログラムのパスに変更してください。
launch.jsonの編集後、ファイルを保存します。

デバッグメニューの左上にある「デバッグ実行開始」をクリックすると、"program" キーで指定したファイルがVS Code上で実行されます。

ここで指定するプログラムは、デバッグモード (gccの場合 -gオプション) でビルドしたファイルでないと正しくデバッグできません。

以下がサンプルのディレクトリ構成 と launch.jsonファイルです。
"program" キーには${workspaceFolder}/debug/main.outを指定しました。

サンプルプロジェクト | ディレクトリ構成
サンプルプロジェクト | ディレクトリ構成
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "launch_cpp",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/debug/main.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

${workspaceFolder}は、VS Codeで開いたディレクトリのパスに置き換わる変数を意味しています。

VS Code側の設定は完了です。続いて、デバッグの操作方法を説明します。

デバッグの操作方法

"program" キーのパスが正しく指定できていれば、デバッグが始まります。
デバッグ時の操作方法は以下の通りです。

ブレークポイント

  • ソースコードエディタの行番号の左側をクリックすると赤い丸が設定されます。この赤い丸がブレークポイントです。
  • ブレークポイントを設定すると、その行でプログラムが一時停止します。

変数ウィンドウ

  • 画面左側には、変数ウィンドウが表示されます。
  • このウィンドウ内で、実行中の変数の状態を確認できます

ステップオーバー/ステップイン/ステップアウト

  • プログラムをステップ実行するための機能です。
  • ステップオーバー | 同一関数内1行分進めます
  • ステップイン | 別の関数をコールする行の場合に、その関数内に入ります
  • ステップアウト現在の関数の終わりまで実行します
VS Code | デバッグ画面の説明
VS Code | デバッグ画面の説明

引数付きでデバッグ実行する場合

さらに、引数を付けてプログラムをデバッグ実行することも可能です。

引数を指定するには、launch.json"args"キーに指定します。
複数個の引数を渡す場合はカンマ区切りで指定します。
以下がサンプルファイルです。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "launch_cpp",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/debug/main.out",
            "args": ["0", "100", "200"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

上記の launch.jsonファイル を実行し、引数を表示するプログラムを用意しました。

int main(int argc, char *argv[])
{
    int i = 0;
    printf("argc = %d\n", argc );
    for( i = 0; i < argc; i++ ){
        printf("argv[%d] = %s\n", i, argv[i] );
    }
    return 0;
}

結果はこちらです。正しく引数が渡されていますね。

argc = 4
argv[0] = [workspaceFolder]/debug/main.out
argv[1] = 0
argv[2] = 100
argv[3] = 200

ブレークポイントを設定すれば、その行でプログラムが自動停止します。

さいごに

今回は、Visual Studio Codeを使用したC言語/C++のデバッグ方法、ステップ実行方法を説明しました。

本家Visual Studioの方が高度なデバッグ(メモリウィンドウ等)が可能ですが、Linuxにはインストールができません。
一方、VSCodeはクロスプラットフォーム対応なので、デバッグ手段の一つとして覚えておくとよいでしょう。

関連として、VSCode上でビルドを自動化するテクニックもこちらにまとめているので参考にして下さい。

あわせて読みたい
【初心者でも分かる】VSCodeのtasks.jsonでタスク自動化する方法を解説 Visual Studio Code(以下、VSCode) では、所定のタスクを自動実行する機能があることをご存じでしょうか?うまく使いこなせば、ビルドやデプロイといった決まった作業を...

2021年全国の本屋さんで最も売れた年間ベストセラー本が気になる方はこちら

いかがだったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧になるかはあなた次第です!

この記事がイイねと思ったら、Twitterフォロー か  にほんブログ村のどちらかしてくれたら嬉しいよ!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント / ご要望

コメントする

goto
もくじ
閉じる