VS Code 调教日记(2022.6.26更新)

基于msys2的MinGW-w64 GCC的环境配置

  1. 下载并安装msys2
  2. 到路径...msys2安装路径...\msys64\etc\pacman.d下找到三个mirrorlist文件将国内两个大学镜像源提至最前
  3. 执行pacman -Syu更新pacman的基本软件仓库
  4. 执行pacman -Su更新的剩余程序
  5. 执行pacman -S --needed base-devel mingw-w64-x86_64-toolchain安装Mingw-w64 GCC编译工具链
  6. 系统->高级系统设置->环境变量->找到上面框里的PATH编辑->添加......msys2安装路径......\msys64\mingw64\bin(如果有别的mingw的路径请删除)
  7. 打开cmd,输入g++ --version,如果出现版本号则说明环境搭建完毕

参考这篇博客

关于.vscode的c++编程环境配置

  1. 下载并安装vscode
  2. 下载并配置c/cpp插件
  3. 写个代码按F5,进入配置编译器tasks.json和launch.json
  4. 再按F5开始调试
  5. 开始玩别的插件qwq

参考这篇博客

c_cpp_properties.json

c_cpp插件配置(一般通过Ctrl+Shift+P,搜索插件名字进入图形化配置界面)

{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}\\**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.19041.0",
"compilerPath": "E:/MYPROGRAM/ENV/MSYS2/msys64/mingw64/bin/g++.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "${default}"
}
],
"version": 4
}

launch.json

前者编译+运行,后者编译+调试

F5启动(启动最近启动的模式),也可以到Run界面手动开启

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(Windows) 启动",
"type": "cppvsdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}",
"args": [
"/C",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"&",
"pause"
],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"preLaunchTask": "C/C++: g++.exe 生成活动文件",
"console": "externalTerminal"
},
{
"name": "(gdb) 启动", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}\\${fileBasenameNoExtension}", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${fileDirname}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"environment": [],
"MIMode": "gdb",
"miDebuggerPath": "E:\\MYPROGRAM\\ENV\\MSYS2\\msys64\\mingw64\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "C/C++: g++.exe 生成活动文件", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}

tasks.json

编译配置

Ctrl+Shift+B编译

{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "g++",
"args": [
"-fdiagnostics-color=always",
//"-fexec-charset=GBK",
//"-finput-charset=UTF-8",
//"-finput-charset=GB2312",
"-std=c++17",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"presentation": {
"echo": true,
"reveal": "silent",
"panel": "shared",
"showReuseMessage": false,
"clear": false
},
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
},
],
"version": "2.0.0"
}

setting.json

files.associations 用于文件关联的高亮格式化。

其他所有工作区配置都会出现在这里,有可能某些插件不工作就是这个文件里面多了些不该有的配置。

关于C_CPP插件自带的代码格式化用法

首先要把设置->文本编辑器中的Format On Save打开

再将C/CPP插件中的Formatting调成vcFormat

最后在C/CPP插件里面关于格式化的配置自定义即可

关于代码模板的用法

在设置->用户代码片段->选择Cpp文件->进行如下类似自定义

prefix用于输入前缀匹配,之后只要在文本中输入这个就可以将文本替换

$符号用于聚焦光标

{
"ACM-MODLE": {
"prefix": "acm",
"body": [
"#include <bits/stdc++.h>",
"$1",
"using namespace std;",
"$2",
"int main() {",
"\tstd::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);",
"\t$3",
"\t",
"\treturn 0;",
"}"
],
"description": "Init an acm model."
}
}

关于vscode乱码

注意编程环境默认是utf-8编码,而中国计算机使用的是gbk编码,这样会导致在环境里的中文到计算机终端会乱码,而计算机自身保存的中文到环境也会乱码。

网上有说,在task配置里面加入-finput-charset用来指定输入文件的的字符编码,-fexec-charset指定了字符串所使用的格式文件编译。这样确实可以解决,但会产生弊端:在future.h中,因为这样的编码会导致编译失败;在平时字符串中打中文会编译失败。这些都是指定编码编译文件产生的问题。

但实际上我们希望的是终端能输出中文不会乱码,即字符串里的中文能被显示,这只要保证保存时的编码和终端使用的编码相同,即GBK编码。因此,我们只需要把打开和保存文件的编码改成GBK即可,不需要更改编译时候使用的代码徒增麻烦。

具体来说,我们使用GBK编码写了一个代码,再用默认的utf-8编码编译是没有任何问题的,因为字母和数字的编码GBK和utf-8是一样的,而字符串虽然utf-8显示不出,但编译过程我们又不管,只要字符串原封不动还给我就行了,最后的可执行文件字符串还是GBK编码下的二进制,于是我们就能看到了。

具体流程:

  1. 左下角齿轮
  2. 设置
  3. 用户下在上面搜索框搜索encoding
  4. 找到File: Encoding
  5. 选择GBK即可

关于vscode的插件

打红框的是我目前C++编程用到的。

一些问题:

  • Error lens

    C_CPP:Error Squiggles 必须是Enable状态,否则无法实时报错。

    长一点代码有可能报不了qwq

VS Code 调教日记(2022.6.26更新)的更多相关文章

  1. SPFA算法(SLF优化)2022.7.8更新

    SPFA可能会被卡掉,能用dijkstra就别用SPFA,代码较长,但我已尽力做到解释,请耐心看下去,存储为邻接表存储. #include<bits/stdc++.h> #define i ...

  2. [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容

    原文地址:http://blog.csdn.net/lovelyelfpop/article/details/50848524 插件地址:https://github.com/nordnet/cord ...

  3. Entity Framework 6 Code First的简单使用和更新数据库结构

    一.安装Entity Framework 6 在项目中右击选择“管理NuGet程序包",联机搜索Entity Framework,点击安装 二.配置数据库连接 在App.config中加入数 ...

  4. UVA 12436-Rip Van Winkle's Code(线段树的区间更新)

    题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...

  5. EF Code first主从表,删除更新从表

    以order和orderItem为例,从表orderItem里有主表的orderId 想通过order.orderitems.add()或者remove()方法直接更新从表的话,必须在从表建立联合主键 ...

  6. TW实习日记:第26天

    这周组长休年假去了,并且之前主要负责的项目也已经上线了,可以说没那么忙了,手头就一个协助别的组做的移动端项目.可是这个项目特别坑,由于网端是9年前的项目,导致后台的接口有非常多的问题,并且入参多得令人 ...

  7. 梦想3D控件 2018.7.26更新

    下载地址: http://www.mxdraw.com/ndetail_108.html 1.  编写所有接口函数使用的CHM文档 2.  增加交互绘制功能 3.  增加案例弧形窗建模案例 4.  增 ...

  8. 梦想CAD控件 2018.7.26更新

    下载地址: http://www.mxdraw.com/ndetail_107.html 1.  增加属性匹配功能 2.  增加List命令 3.  增加CAD图纸审图批注功能 4.  环形阵列功能 ...

  9. 梦想Android版CAD控件2018.7.26更新

    下载地址: http://www.mxdraw.com/ndetail_109.html 1. 增加所有接口CHM帮助文档 2. 增加得到当前打开文件函数 3. 读写CAD扩展记录接口 4. 读写属性 ...

随机推荐

  1. Effective HPA:预测未来的弹性伸缩产品

    作者 胡启明,腾讯云专家工程师,专注 Kubernetes.降本增效等云原生领域,Crane 核心开发工程师,现负责成本优化开源项目 Crane 开源治理和弹性能力落地工作. 余宇飞,腾讯云专家工程师 ...

  2. 携程开源分布式配置系统Apollo服务端是如何实时更新配置的?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  3. VUE 日期组件(包括年选择)

    封装vant 日期组件实现可以选择年份 <template> <div class="yearMonMain"> <div class="l ...

  4. 《Streaming Systems》第三章: Watermarks

    定义 对于一个处理无界数据流的 pipeline 而言,非常需要一个衡量数据完整度的指标,用于标识什么时候属于某个窗口的数据都已到齐,窗口可以执行聚合运算并放心清理,我们暂且就给它起名叫 waterm ...

  5. Java多线程—线程同步(单信号量互斥)

    JDK中Thread.State类的几种状态 线程的生命周期         线程的安全问题(同步与互斥) 方法一:同步代码块 多个线程的同步监视器(锁)必须的是同一把,任何一个类的对象都可以 syn ...

  6. 使用 HDFS 协议访问对象存储服务

    背景介绍 原生对象存储服务的索引是扁平化的组织形式,在传统文件语义下的 List 和 Rename 操作性能表现上存在短板.腾讯云对象存储服务 COS 通过元数据加速功能,为上层计算业务提供了等效于 ...

  7. Django基础之Form和ModelForm组件

    https://www.cnblogs.com/clschao/articles/10486468.html 1.创建django项目 2.创建py文件 3.导入form from django im ...

  8. 结合 Vuex 和 Pinia 做一个适合自己的状态管理 nf-state

    一开始学习了一下 Vuex,感觉比较冗余,就自己做了一个轻量级的状态管理. 后来又学习了 Pinia,于是参考 Pinia 改进了一下自己的状态管理. 结合 Vuex 和 Pinia, 保留需要的功能 ...

  9. Springboot目录结构分析

    1 src/main/java 存储源码 2 src/main/resource 资源文件夹    (1)src/main/resource/static 用于存放静态资源,如css.js.图片.文件 ...

  10. 137_Power BI 自定义矩阵复刻Beyondsoft Calendar

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前两天我们用PBI原生的视觉制作了自定义的热力图,今天我们来复刻一个Beyondsoft Calendar 1. ...