当前位置: 首页 > news >正文

VS Code搭建C/C++开发调试环境-Windows

前提

1.下载并安装好VS Code和MinG-w64

VSCode安装这两个插件即可

2.双击ucrt64.exe,执行以下命令安装 MinGW-w64 工具链

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
//执行后回车,Y回车就行,默认接受所有的安装包

3.安装完成后配置系统环境变量E:\msys64\ucrt64\bin,实际根据自己电脑路径即可。后面VSCode配置json都会用到这个路径。

C单文件调试

目录结构

test.c

#include<stdio.h>int main(){for(int i=0;i<10;i++){printf("hello world!");}return 0;
}

.vscode配置

ctrl+shift+p:快速配置

c_cpp_properties.json

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"windowsSdkVersion": "10.0.22621.0","compilerPath": "E:\\msys64\\ucrt64\\bin\\gcc.exe","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "gcc-x64"},{"name": "C++","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"windowsSdkVersion": "10.0.22621.0","compilerPath": "E:\\msys64\\ucrt64\\bin\\g++.exe","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "gcc-x64"}],"version": 4
}

launch.json

{"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch",// 1. 修正程序路径:使其与 tasks.json 的输出("-o")一致"program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",// 2. 添加 preLaunchTask:告诉调试器在启动前先运行哪个构建任务//    这个值必须与 tasks.json 里的 "label" 一致"preLaunchTask": "C/C++: gcc.exe build active file","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailies": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

tasks.json

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe build active file","command": "E:\\msys64\\ucrt64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}","env": {// 添加这个env块,把gcc的路径加到PATH里"PATH": "E:\\msys64\\ucrt64\\bin;${env:PATH}"}},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true // 将其设为默认构建任务},"detail": "compiler: E:\\msys64\\ucrt64\\bin\\gcc.exe"}]
}

C多文件调试

目录结构

max.h

#ifndef __MAX_H__
#define __MAX_H__
#include <stdio.h>int findMaxNum(int num1, int num2);#endif // __MAX_H__

max.c

#include "max.h"int findMaxNum(int num1, int num2)
{return num1 > num2 ? num1 : num2;
}

test2.c

#include <stdio.h>
#include "max.h"int main()
{int a = 10;int b = 20;int c = findMaxNum(a, b);printf("%d\n", c);return 0;
}

.vscode配置

c_cpp_properties.json不变

launch.json

{"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch",// 1. 核心修改:程序路径必须与 tasks.json 的 "-o" 输出路径一致"program": "${fileDirname}\\${workspaceRootFolderName}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",// 2. 核心修改:preLaunchTask 必须与 tasks.json 的 "label" 一致"preLaunchTask": "C/C++: gcc.exe build project","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailies": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

tasks.json

{"version": "2.0.0","tasks": [{"type": "cppbuild",// 1. (可选) 更改标签名称,使其更清晰"label": "C/C++: gcc.exe build project","command": "E:\\msys64\\ucrt64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g",// 2. 核心修改:编译当前目录下所有的 .c 文件"${fileDirname}\\*.c","-o",// 3. 核心修改:输出一个固定的可执行文件名,例如 "C1.exe""${fileDirname}\\${workspaceRootFolderName}.exe"],"options": {"cwd": "${fileDirname}","env": {"PATH": "E:\\msys64\\ucrt64\\bin;${env:PATH}"}},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "compiler: E:\\msys64\\ucrt64\\bin\\gcc.exe"}]
}

C++单文件调试

目录结构

test1.cpp

#include<iostream>
using namespace std;int main(){for(int i=0;i<10;i++){cout<<i<<endl;}return 0;
}

.vscode配置

c_cpp_properties.json不变

launch.json

{"version": "0.2.0","configurations": [{// 1. (可选) 修改 name"name": "(gdb) C++ 启动","type": "cppdbg","request": "launch",// 2. 修改 program 路径,匹配 tasks.json 的输出"program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",// 3. 修改 preLaunchTask,匹配 tasks.json 的 label"preLaunchTask": "C/C++: g++.exe build active file","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailies": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

tasks.json

{"version": "2.0.0","tasks": [{"type": "cppbuild",// 1. 修改 label"label": "C/C++: g++.exe build active file",// 2. 修改 command 为 g++.exe"command": "E:\\msys64\\ucrt64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g",// 3. 修改 args,编译当前文件"${file}","-o",// 4. 修改输出,基于当前文件名"${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}","env": {"PATH": "E:\\msys64\\ucrt64\\bin;${env:PATH}"}},"problemMatcher": ["$gcc" // $gcc 格式器同样适用于 g++],"group": {"kind": "build","isDefault": true},// 5. (可选) 修改 detail"detail": "compiler: E:\\msys64\\ucrt64\\bin\\g++.exe"}]
}

C++多文件调试

配置主要就是把gcc改成g++

目录结构

max.h

#ifndef __MAX_H__
#define __MAX_H__
#include<iostream>
using namespace std;int findMaxNum(int num1, int num2);#endif // __MAX_H__

max.cpp

#include "max.h"int findMaxNum(int num1, int num2)
{return num1 > num2 ? num1 : num2;
}

test3.cpp


#include "max.h"int main()
{int a = 10;int b = 20;int c = findMaxNum(a, b);cout<<c<<endl;return 0;
}

.vscode配置

c_cpp_properties.json不变

launch.json

{"version": "0.2.0","configurations": [{"name": "(gdb) C++ 启动", // 你可以保留之前的名字"type": "cppdbg","request": "launch",// 1. 核心修改:程序路径必须与 tasks.json 的 "-o" 输出路径一致"program": "${fileDirname}\\${workspaceRootFolderName}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",// 2. 核心修改:preLaunchTask 必须与 tasks.json 的 "label" 一致"preLaunchTask": "C/C++: g++.exe build project","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailies": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

tasks.json

{"version": "2.0.0","tasks": [{"type": "cppbuild",// 1. 修改 label"label": "C/C++: g++.exe build project","command": "E:\\msys64\\ucrt64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g",// 2. 核心修改:编译当前目录下所有的 .cpp 文件"${fileDirname}\\*.cpp","-o",// 3. 核心修改:输出一个固定的可执行文件名"${fileDirname}\\${workspaceRootFolderName}.exe"],"options": {"cwd": "${fileDirname}","env": {"PATH": "E:\\msys64\\ucrt64\\bin;${env:PATH}"}},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "compiler: E:\\msys64\\ucrt64\\bin\\g++.exe"}]
}

用CMake构建程序调试

这是管理 C/C++ 项目的标准方式,一旦配置好,它会比 tasks.json 自动化得多,并且在所有平台上(Windows, Linux, macOS)都能工作。以下是在 VSCode 中使用 CMake 自动化编译 test3.cpp, max.cppmax.h 的完整步骤。

完整步骤

第 1 步:安装必备工具

安装 CMake: 你正在使用 MSYS2,可以直接用 pacman 安装 CMake。

  1. Bash
# 打开你的 MSYS2 UCRT64 终端
pacman -S mingw-w64-ucrt-x86_64-cmake
  1. 安装 VSCode 插件:
  • 在 VSCode 中,安装 Microsoft 官方的 CMake Tools 插件。这是在 VSCode 中无缝使用 CMake 的关键,前面装了C/C++的扩展自动会有。

第 2 步:清理旧的 VSCode 配置

CMake 会完全接管编译过程。

  1. 你可以 删除 **.vscode/tasks.json** 文件。你不再需要它了。
  2. 你需要 **修改 ****.vscode/launch.json** 文件(见第 4 步)。
  3. c_cpp_properties.json不变

第 3 步:创建 CMakeLists.txt 文件

在你的项目根目录下(与 test3.cpp, max.cppmax.h 放在同一级),创建一个名为 CMakeLists.txt 的文件(注意大小写)。

# 设置最低 CMake 版本要求
cmake_minimum_required(VERSION 3.10)# 设置项目名称 (这也会是你 .exe 文件的默认名称)
# 我根据你的文件名将其命名为 "MaxTest"
project(MaxTest)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)# 添加可执行文件
# CMake 会自动从源文件推断并找到 .h 头文件
# 你只需要列出所有的 .cpp 源文件
add_executable(${PROJECT_NAME}  # 目标可执行文件的名字 (即 MaxTest.exe)test3.cpp        # 你的 main 文件max.cpp          # 其他源文件
)# 注意:如果你的 .h 文件在单独的 "include" 目录中,
# 你还需要添加 target_include_directories()。
# 但在你的例子中,它们在同一目录,所以不需要。

第 4 步:在 VSCode 中配置和构建

安装好 CMake Tools 插件并创建 CMakeLists.txt 后,重载 VSCode 窗口。

  1. 配置 (Configure):
    • VSCode 的状态栏(底部)现在会显示 CMake 的相关按钮。
    • 它可能会弹窗询问 “Would you like to configure…?”,点击 “Yes”。
    • 它会要求你 “Select a Kit” (选择一个套件)。你应该能看到类似 GCC for ucrt64 ... (E:\msys64\ucrt64\bin\g++.exe) 的选项。选择这个 g++.exe 套件
    • 如果没有提示,可以按 Ctrl+Shift+P 打开命令面板,输入 CMake: Select a Kit 来手动选择。如果电脑有多个环境,记得别选错了。
  2. 构建 (Build):
    • 按下 F7(CMake Tools 默认的构建快捷键)。
    • 或者,点击状态栏上的 “Build” 按钮。
    • CMake 会在你的项目根目录下创建一个 build 文件夹,并在里面生成 MaxTest.exe

第 5 步:修改 launch.json (用于调试)

现在你需要告诉 VSCode 调试器去哪里找 CMake 生成的 .exe 文件。你不再需要 **preLaunchTask**,因为 CMake Tools 插件会确保在调试前自动构建。

**.vscode/launch.json**

{"version": "0.2.0","configurations": [{"name": "(gdb) 启动 (CMake)","type": "cppdbg","request": "launch",// 1. 核心修改:程序路径指向 CMake 的构建输出// ${PROJECT_NAME} 必须和你 CMakeLists.txt 里的 project() 名称一致"program": "${workspaceFolder}/build/MaxTest.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}", // 工作目录"environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",// 2. 核心修改:不再需要 preLaunchTask// "preLaunchTask": "..."  <-- 删掉这一行"setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

调试 (Debug):在源代码中打完断点,选中MaxTest.exe按 F5就可以调试了

http://www.dtcms.com/a/528547.html

相关文章:

  • 怎么把自己做的网站发布到网上网站建设专题页面
  • 面向智慧农业的自主移动果蔬采摘机器人:融合视觉识别与自动驾驶的智能化农作系统研究
  • 厦门专业网站设计公司低价网站建设推广优化
  • ClickHouse 介绍
  • 何时在 ClickHouse 中使用 ARRAY JOIN
  • Stream流中.filter和.map的用法区别
  • 在万网上域名了怎么做网站网页设计与制作工资多少
  • 哈尔滨网站建设制作费用百度推广销售
  • FireFox如何滚动截屏?
  • 【Linux】Tomcat基本配置
  • 网站建设的系统分析有哪些好的建站平台
  • 【大模型推理】ScheduleBatch 学习
  • 【经典书籍】C++ Primer 第19章特殊工具与技术精华讲解
  • JAVA面试汇总(二)多线程(五)
  • 怎样设计网站模板网站 建设初步
  • 网站建设所需的硬件设备网站运营工作是干什么的
  • 网站中的表格wordpress后台404
  • 从零开始:C++ 多进程 TCP 服务器实战(续篇)
  • 阮一峰《TypeScript 教程》学习笔记——装饰器
  • 一、基础预训练模型与能力
  • 上海网站建设选缘魁-企查公司简介模板文案
  • 重磅新书 | 《链改2.0:从数字资产到RWA》
  • 【IOS开发】SwiftUI + OpenCV实现图片的简单处理(一)
  • 【Docker】docker run
  • 成都网站建设 Vr便民网
  • LLama3架构原理浅浅学学
  • docker存储管理
  • Transformer架构发展历史
  • 【AI原生架构:数据架构】9、从打破数据孤岛到价值升维,企业数据资产变现全流程
  • Kubernetes 上的 GitLab + ArgoCD 实践(二):使用自建 GitLab Runner 完善 CI 流程