搭建好GNU C环境后,如何集成到VSCode呢? 这里一步步教你如何做。
第一步 设定PATH环境变量
MSYS2安装目录默认在C:\msys64,通过pacman安装的gcc、make、gdb都在目录 C:\msys64\usr\bin下。
设置环境变量,便于vscode找得到相关文件
第二步:安装vscode插件C++
为vscode安装C/C++扩展
第三步: 使用task.json、 launch.json配置vscode环境
vscode打开一个工作目录,在此工作目录下创建一个.vscode目录,在.vscode目录下创建task.json文件,lauch.json文件,分别如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "make",
"type": "shell",
"command": "cd ${workspaceFolder}/code/c/ ; make",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": "$gcc"
},
{
"label": "gcc build active file",
"type": "shell",
"command": "gcc",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
{
"version": "0.2.0",
"configurations": [
{
"name": "GCC Buid and Debug C/C++",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\code\\c\\exe\\${fileBasenameNoExtension}.exe",
"args": ["100" ,"1000", "1"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/code/c/",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "make",
"miDebuggerPath": "c:/msys64/mingw64/bin/gdb.exe", // 根据您的安装路径调整
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"sourceFileMap": {
"": "${workspaceFolder}\\code\\c\\src\\"
}
}
]
}
第四步 :编辑c代码、makefile
$ tree -L 1
.
├── exe
├── makefile
├── obj
└── src
在src中添加一个文件test_yaml.c,如下:
#include
#include
#include
#include
#include
void read_yaml(const char *filename) {
FILE *file = fopen(filename, "r");
if (!file) {
perror("Failed to open file");
return;
}
yaml_parser_t parser;
yaml_event_t event;
// Initialize the parser
if (!yaml_parser_initialize(&parser)) {
fprintf(stderr, "Failed to initialize parser!\n");
fclose(file);
return;
}
yaml_parser_set_input_file(&parser, file);
// Parse the YAML file
while (1) {
if (!yaml_parser_parse(&parser, &event)) {
fprintf(stderr, "Parser error %d: %s\n", parser.error, parser.problem);
break;
}
// Handle the events
switch (event.type) {
case YAML_MAPPING_START_EVENT:
printf("Mapping start\n");
break;
case YAML_MAPPING_END_EVENT:
printf("Mapping end\n");
break;
case YAML_SCALAR_EVENT:
printf("Scalar: %s\n", event.data.scalar.value);
break;
case YAML_SEQUENCE_START_EVENT:
printf("Sequence start\n");
break;
case YAML_SEQUENCE_END_EVENT:
printf("Sequence end\n");
break;
default:
break;
}
// Break on the end of the document
if (event.type == YAML_STREAM_END_EVENT || event.type == YAML_NO_EVENT) {
break;
}
// Free the event
yaml_event_delete(&event);
}
// Cleanup
yaml_parser_delete(&parser);
fclose(file);
}
void print_data(const char *old_data, const char *new_data) {
// 清屏
printf("\033[H\033[J"); // ANSI 转义序列,清屏
printf("Data:\n");
// 获取数据的最大长度
size_t max_length = strlen(old_data) > strlen(new_data) ? strlen(old_data) : strlen(new_data);
for (size_t i = 0; i < max_length; i++) {
// 检查 old_data 和 new_data 的每个字符
char old_char = (i < strlen(old_data)) ? old_data[i] : ' ';
char new_char = (i < strlen(new_data)) ? new_data[i] : ' ';
if (new_char != old_char) {
// 如果字符不同,标记为红色
printf("\033[31m%c\033[0m", new_char); // 红色
} else {
// 如果字符相同,正常输出
printf("%c", new_char);
}
}
printf("\n");
}
int main() {
const char *filename = "config.yaml";
read_yaml(filename);
return 0;
}
然后通过vscode,启动调试:按F5或者点选菜单RUN-start debug
在代码编辑视图中设置断点
会先执行make,然后进入调试。