最終更新: 2021-05-20
VSCode には、WSL と連携した GDB (The GNU Project Debugger) デバッガの GUI フロントエンド機能が備わって居ます。また、自作した Makefile の VSCode 内からの実行も可能です。本記事では、マイクロソフト製の C/C++ 言語用のデバッグ拡張機能、および同 Makefile 拡張機能のインストールと、複数ファイルのビルドから GUI でのシングルステップ実行によるソースコードデバッグまでの手順を紹介します。
目次: VSCode と WSL 内の GDB (The GNU Project Debugger) との連携には、Microsoft 製の IntelliSense 付きの デバッガをインストールして使用します。IntelliSense 自体はソースコードの自動補完 (オートコンプリ―ト) 機能ですが、デバッガと組み合わせると変数の中身の値も表示可能になります。次の手順でイントールします。 VSCode 内からの WSL 上 Makefile の実行にも、Microsft 製の IntelliSense 連携ツールを使用します。 Make によるビルドから GUI 上でのシングルステップ実行によるデバッグの実施例として、次のプログラムを使用します。Make の例題として、敢えて数行の複数ファイルにプログラムを分割しています。WSL の Linux 上に適当にディレクトリを作り、その下にファイルを置いてください。 Makefile は、タブキーが区切り記号となります。スペース8個をタブキーに置き換える為に、 次のメッセージが出れば、正しく動作しています。 一旦ビルドしたバイナリファイルを、消去します。また、不要となった 以下の手順に従って、VSCode の内部で make の設定します。この設定は1回だけ実施すれば当該ディレクトリ内 ( 以下の手順で、ソースコードを1行ずつシングルステップしてデバッグ可能です。
C/C++ 用の IntelliSense をインストールする:
code
コマンドからの実行でも、どちらでも構いません。Ctrl+Shift+x
キーを押して、左列に拡張機能サーチボックスを表示します。Ctrl+a
、BS
の順にキーを押しボックス内の文字を消去します。C/C++
と入力し、Microsoft 製の C/C++ IntelliSense, debugging, and code browsing.
をインストールします。
MS製の Makefile Tools をインストールする:
Ctrl+Shift+x
キーを押して、左列に拡張機能サーチボックスを表示します。Ctrl+a
、BS
の順にキーを押しボックス内の文字を消去します。Makefile Tools
と入力し、Microsoft 製の Makefile Tools - Provide makefile support in VS Code: C/C++ IntelliSence, build, debug/run.
をインストールします。
実験用サンプルソースコード:
Makefile.tmp
、arith.h
、iadd.c
、isub.c
、main.c
の5つのファイルが出来ます。
cat << "EOF" > main.c
#include <stdint.h>
#include "arith.h"
int32_t main() {
volatile int32_t a, b;
int32_t c;
a = 4;
b = 3;
c = iadd(a, b);
if (c != 7) return 1;
c = isub(a, b);
if (c != 1) return 1;
return 0;
}
EOF
cat << "EOF" > iadd.c
#include <stdint.h>
int32_t iadd(int32_t a, int32_t b) {
int32_t c;
c = a + b;
return c;
}
EOF
cat << "EOF" > isub.c
#include <stdint.h>
int32_t isub(int32_t a, int32_t b) {
int32_t c;
c = a - b;
return c;
}
EOF
cat << "EOF" > arith.h
#include <stdint.h>
int32_t iadd(int32_t a, int32_t b);
int32_t isub(int32_t a, int32_t b);
EOF
cat << "ALLEOF" > Makefile.tmp
PROGRAM = main.out
DISASM = main.disa
INCS = arith.h
SRCS = main.c iadd.c isub.c
OBJS = main.o iadd.o isub.o
CFLAGS = -g -gdwarf-2 -Og
.PHONY: all
all: depend $(PROGRAM) $(DISASM)
#.c.o:
# $(CC) $(CFLAGS) $(CPPFLAGS) $(PROGRAM_ARCH) -c -o $@ $<
$(PROGRAM): $(OBJS)
$(CC) $(LDFLAGS) $(PROGRAM_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
$(DISASM): $(PROGRAM)
objdump --disassemble-all --source --section=.text $< > $@
.PHONY: clean
clean:
$(RM) *.o $(PROGRAM) $(DISASM)
.PHONY: depend
depend: $(INCS) $(SRCS)
ALLEOF
Makefile の動作の確認:
unexpand
コマンドを使用します。ファイルを展開した WSL のディレクトリで次のコマンドを実行して、ファイルの修正およびビルドの動作確認を行います。unexpand Makefile.tmp > Makefile
make
gcc -g -gdwarf-2 -Og -c -o main.o main.c
gcc -g -gdwarf-2 -Og -c -o iadd.o iadd.c
gcc -g -gdwarf-2 -Og -c -o isub.o isub.c
gcc main.o iadd.o isub.o -lg -o main.out
Makefile.tmp
を消去します。make clean
rm Makefile.tmp
VSCode 内での make の実行:
.vscode
ディレクトリ内のログファイル) に記憶され、次回からは自動で実行されます。
code .
main.c
をクリックして表示しておきます。
MAKEFILE
ウィンドウで Build target:
にマウスをホバーし、右の鉛筆マークをクリックします。all
を選択すると make が始まります。Configure succeeded.
の文字を確認しておきます。
GUI でのシングルステップの実行:
MAKEFILE
ウィンドウのLaunch target:
にマウスをホバーし、右の鉛筆マークをクリックします。
main.out
を選択します。main.c
ウィンドウ左の行番号の更に左にマウスをホバーします。
a = 4
とします。MAKEFILE
ウィンドの上に有る「再生 ▷
のマーク」Run in terminal
をマウスでクリックすると make が実行されます。MAKEFILE
ウィンドの上に有る「虫のマーク」 Debug
をマウスでクリック、もしくは F5
キーを押すとデバッグが始まります。
F11
キー (ステップインする) を押すと、下位プログラムの中も含めてシングルステップ実行出来ます。ホームベース型の記号が次に実行する行をしめします。デバッガはホームベース記号が表示されている行の実行直前で停止しています。
F10
キー (ステップオーバーする) を押すと、下位プログラムの中には入らずシングルステップ実行出来ます。
エラーメッセージ例: 'libc-start.c' を開くことができません。
×
印をクリックして閉じて構いません。Ctrl+Shift+F5
を押します。Shift+F5
を押します。