vscode配置

vscode插件vim:esc和caps没切换,文件-首选项-设置,搜Keyboard:Dispatch改为keyCode重启软件即可

vscode调试C/C++

安装以下工具(本地调试直接本地安装,若远程调试就ssh之后在远程安装)

  • vscode插件C/C++:C/C++ IntelliSense, debugging, and code browsing.
  • vscode插件Cmake Tools:Extended CMake support in Visual Studio Code

系统ubuntu:

1
sudo apt install -y build-essential gdb cmake

系统arch:

1
sudo pacman -S base-devel gdb cmake

本地单文件调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# zh @ li in ~/hello [20:14:03]
$ tree -a
└── hello.c

# zh @ li in ~/hello [20:15:03]
$ cat hello.c
#include <stdio.h>
#include <stdlib.h>

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

运行-添加配置-C++(GDB/LLDB)-gcc(/usr/bin/gcc),自动生成 launch.json 和 tasks.json 并进入调试(此时就可以打断点重新调试,在断点时,在调试控制台可以敲指令修改变量值等等的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# zh @ li in ~/li/tmp/hello [21:39:07]
$ tree -a
.
├── hello
├── hello.c
└── .vscode
├── launch.json #该文件用于调试
└── tasks.json #该文件用于编译

1 directory, 4 files

# zh @ li in ~/li/tmp/hello [21:43:09]
$ cat .vscode/tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc 生成活动文件",
"command": "/usr/bin/gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}%
# zh @ li in ~/li/tmp/hello [21:46:58]
$ cat .vscode/launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gcc - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}", //改为编译生成的可执行文件路径
"args": [], //想要传给可执行文件的参数
"stopAtEntry": false, //true表示在main第一行断点调试
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc 生成活动文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}

本地调试cmake项目

ctrl+shift+p-CMake:QuickStart-GCC 11.2.0 x86_64-pc-linux-gnu Using compilers:C=/usr/bin/gcc,CXX=/usr/bin/g++-项目名hello-Executable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# zh @ li in ~/li/tmp/hello [22:15:38]
$ tree -a -I build
.
├── CMakeLists.txt
└── main.cpp

0 directories, 2 files

# zh @ li in ~/li/tmp/hello [22:16:16]
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(hello VERSION 0.1.0)

include(CTest)
enable_testing()

add_executable(hello main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

# zh @ li in ~/li/tmp/hello [22:16:23]
$ cat main.cpp
#include <iostream>

int main(int, char**) {
std::cout << "Hello, world!\n";
}

ctrl+shift+p-CMake:Select a kit可修改编译工具链(也可在状态栏点击修改或ctrl+shift+p-CMake:Edit User-Local Cmake Kits)

ctrl+shift+p-CMake:Select Variant可修改编译级别类型(也可在状态栏点击修改)

ctrl+shift+p-CMake:Configure配置项目

ctrl+shift+p-CMake:Build构建项目(也可在状态栏点击build)默认情况是构建所有目标,可以ctrl+shift+p-CMake:Set Build Target选择要构建的目标(也可以点状态栏)

设置断点过后,ctrl+shift+p-CMake:Debug即可开始调试(也可按F5)

远程调试

  1. ssh-copy-id usr@ipaddr
  2. vscode插件Remote-SSH:Open any folder on a remote machine using SSH and take advantage of VS Code’s full feature set.
  3. vscode通过ssh登陆到远程
  4. vscode搜索前面的插件,选择安装到远程
  5. 打开项目,调试方式跟前面的一样