こんにちは、現役エンジニアの inno_tech です。
無料のエディタのVisual Studio Code(VS Code)ですが、実はデバッグ機能があることをご存じでしょうか?
今回はVisual Studio Codeを使用してC言語(C++)でデバッグ実行を行う方法を説明します。
※本記事は、Ubuntu 20.04LTSの場合を例に説明しています。
Visual Studio Code 側の準備
Visual Studio Codeのインストールは、こちらの記事を参照してください。
拡張機能 C/C++ Extension Pack のインストール
Visual Studio CodeでC/C++を扱うためには、拡張機能を使用します。
拡張機能メニュー(Ctrl + Shift + X
)から「C/C++ Extension Pack」を検索し、インストールしてください。
なお、拡張機能のインストール方法については、こちらの記事で詳しく紹介しています。
拡張機能がインストール出来たら、次のステップに進んでください。
launch.jsonファイルの作成
開発したプログラムをデバッグ実行するため、launch.json というファイルを作成します。
launch.json は VS Code用の設定ファイルです。VS Codeから実行するプログラムのパスや引数といった設定を記述します。
launch.jsonの作成手順
早速、launch.jsonの作成方法を説明します。
まず、デバッグメニュー(Ctrl + Shift + D
)を開き、「launch.jsonファイルを作成します。」と表示されている部分をクリックします。
すると、画面の上部にコマンドパレットが開き、いくつかの候補が表示されます。
その中から、「C++(GDB/LLDB)」 を選択します。
この操作によって、「.vscode」直下にC/C++用の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
}
]
}
]
}
VS Code側の設定は完了です。続いて、デバッグの操作方法を説明します。
デバッグの操作方法
"program"
キーのパスが正しく指定できていれば、デバッグが始まります。
デバッグ時の操作方法は以下の通りです。
ブレークポイント
- ソースコードエディタの行番号の左側をクリックすると赤い丸が設定されます。この赤い丸がブレークポイントです。
- ブレークポイントを設定すると、その行でプログラムが一時停止します。
変数ウィンドウ
- 画面左側には、変数ウィンドウが表示されます。
- このウィンドウ内で、実行中の変数の状態を確認できます。
ステップオーバー/ステップイン/ステップアウト
- プログラムをステップ実行するための機能です。
- ステップオーバー | 同一関数内で1行分進めます
- ステップイン | 別の関数をコールする行の場合に、その関数内に入ります
- ステップアウト | 現在の関数の終わりまで実行します
引数付きでデバッグ実行する場合
さらに、引数を付けてプログラムをデバッグ実行することも可能です。
引数を指定するには、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上でビルドを自動化するテクニックもこちらにまとめているので参考にして下さい。
2021年の全国の本屋さんで最も売れた年間ベストセラー本が気になる方はこちら。
いかがだったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧になるかはあなた次第です!
この記事がイイねと思ったら、Twitterフォロー か にほんブログ村のどちらかしてくれたら嬉しいよ!
コメント / ご要望