VS Code gdb [Win & Linux 対応プログラム開発環境の構築6]
prev: [VS Code SSH] Win & Linux 対応プログラム開発環境の構築5
VS Code から Remote で gdb が出来るけれども, ブレークポイント(breakpoint) が機能しないということがある。
その原因は root 権限でもない(root権限はいらない)し、launch.json に特別な何かが必要なわけでもない。
たんじゅんにビルドの時点で デバッグオプション付けていないからである。
いや – gつけてると思っていてもそれがリンカの時点なのか、コンパイルの時点なのか見る。いったんオブジェクトを生成している場合はその時点でつける、
すなわち、
gcc -g -O0 -c -o KumaNetCom/KumaNetCom.o KumaNetCom/KumaNetCom.cpp
gcc -g -O0 -c -o KumaNetCom/LinuxUniq.o KumaNetCom/LinuxUniq.cpp
gcc -pthread ./KumaNetCom/KumaNetCom.o ./KumaNetCom/LinuxUniq.o -L/usr/local/lib -o ./KumaNetCom/KumaNet
-g や 最適化O は コンパイルの時点につける。スレッド機能を利用する場合に必要な -pthread はリンカの時点でつける。
VSCode における ビルドタスクの設定は、
{
"version": "2.0.0",
"tasks": [
{
"label": "ExecuteMake",
"type": "shell",
"command": "./dbgmake.sh",
"args": [],
"options": {
"cwd": "/home/yuki/_s/KumaNetCom"
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}
デバッグタスクの設定は、
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote GDB Ubuntu",
"type": "cppdbg",
"request": "launch",
"program": "/home/yuki/_s/KumaNetCom/KumaNetCom/KumaNet",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "gdb の再フォーマットを有効にする",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "ExecuteMake",
}
]
}
と成る。
ちなみに、makeファイルも書いたが、再帰的にかいた場合スマートになる反面、オプションを付けにくい構文になる。
CC = gcc -pthread
DEST = /usr/local/bin
LDFLAGS = -L/usr/local/lib
#LIBS = -lhoge -lm #include libhoge.a
CDIRS = ./KumaNetCom/
BDIRS = ./KumaNetCom/
OBJS = $(CDIRS)KumaNetCom.o $(CDIRS)LinuxUniq.o
PROGRAM = $(BDIRS)KumaNet
all: $(PROGRAM)
$(PROGRAM): $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $(PROGRAM)
clean:; rm -f $(CDIRS)*.o $(PROGRAM)
この構文では、 Cソースに変更があった場合のみ、当該ソースに関してコンパイルを実行するという処理が、スマートに表示されている。ただし個別にオプションをつけたりするときは、不便である。
以上である。