VS Code 调教日记(2022.6.26更新)
VS Code 调教日记(2022.6.26更新)
基于msys2的MinGW-w64 GCC的环境配置
- 下载并安装msys2
- 到路径...msys2安装路径...\msys64\etc\pacman.d下找到三个mirrorlist文件将国内两个大学镜像源提至最前
- 执行pacman -Syu更新pacman的基本软件仓库
- 执行pacman -Su更新的剩余程序
- 执行pacman -S --needed base-devel mingw-w64-x86_64-toolchain安装Mingw-w64 GCC编译工具链
- 系统->高级系统设置->环境变量->找到上面框里的PATH编辑->添加......msys2安装路径......\msys64\mingw64\bin(如果有别的mingw的路径请删除)
- 打开cmd,输入g++ --version,如果出现版本号则说明环境搭建完毕
关于.vscode的c++编程环境配置
- 下载并安装vscode
- 下载并配置c/cpp插件
- 写个代码按F5,进入配置编译器tasks.json和launch.json
- 再按F5开始调试
- 开始玩别的插件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编码下的二进制,于是我们就能看到了。
具体流程:
- 左下角齿轮
- 设置
- 用户下在上面搜索框搜索encoding
- 找到File: Encoding
- 选择GBK即可
关于vscode的插件
打红框的是我目前C++编程用到的。
一些问题:
Error lens
C_CPP:Error Squiggles 必须是Enable状态,否则无法实时报错。
长一点代码有可能报不了qwq

VS Code 调教日记(2022.6.26更新)的更多相关文章
- SPFA算法(SLF优化)2022.7.8更新
SPFA可能会被卡掉,能用dijkstra就别用SPFA,代码较长,但我已尽力做到解释,请耐心看下去,存储为邻接表存储. #include<bits/stdc++.h> #define i ...
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容
原文地址:http://blog.csdn.net/lovelyelfpop/article/details/50848524 插件地址:https://github.com/nordnet/cord ...
- Entity Framework 6 Code First的简单使用和更新数据库结构
一.安装Entity Framework 6 在项目中右击选择“管理NuGet程序包",联机搜索Entity Framework,点击安装 二.配置数据库连接 在App.config中加入数 ...
- 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 ...
- EF Code first主从表,删除更新从表
以order和orderItem为例,从表orderItem里有主表的orderId 想通过order.orderitems.add()或者remove()方法直接更新从表的话,必须在从表建立联合主键 ...
- TW实习日记:第26天
这周组长休年假去了,并且之前主要负责的项目也已经上线了,可以说没那么忙了,手头就一个协助别的组做的移动端项目.可是这个项目特别坑,由于网端是9年前的项目,导致后台的接口有非常多的问题,并且入参多得令人 ...
- 梦想3D控件 2018.7.26更新
下载地址: http://www.mxdraw.com/ndetail_108.html 1. 编写所有接口函数使用的CHM文档 2. 增加交互绘制功能 3. 增加案例弧形窗建模案例 4. 增 ...
- 梦想CAD控件 2018.7.26更新
下载地址: http://www.mxdraw.com/ndetail_107.html 1. 增加属性匹配功能 2. 增加List命令 3. 增加CAD图纸审图批注功能 4. 环形阵列功能 ...
- 梦想Android版CAD控件2018.7.26更新
下载地址: http://www.mxdraw.com/ndetail_109.html 1. 增加所有接口CHM帮助文档 2. 增加得到当前打开文件函数 3. 读写CAD扩展记录接口 4. 读写属性 ...
随机推荐
- JavaWeb和WebGIS学习笔记(五)——使用OpenLayers显示地图
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- 【安全建设】日志监控的极品工具sysmon
转载请注明出处:https://www.cnblogs.com/vitalemontea/p/16178048.html 1.前言 最近态势感知爆了某个同事有挖矿事件的告警,打开一看,就是会通过dns ...
- java高级用法之:JNA中的回调
目录 简介 JNA中的Callback callback的应用 callback的定义 callback的获取和应用 在多线程环境中使用callback 总结 简介 什么是callback呢?简单点说 ...
- SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统
一.单点登录SSO介绍 目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...
- Vue中mixins、extends、extend和components的作用和区别
关于mixins:官方文档: https://cn.vuejs.org/v2/guide/mixins.html 一.components Vue.component是用来注册或获取全局组件的方法,其 ...
- Oracle中通过逗号分割字符串并转换成多行
通过逗号对字符串字段进行分割,并返回多行,通过使用regexp_substr()函数实现. SQL示例: select regexp_substr(q.nums, '[^,]+', 1, rownum ...
- 好客租房46-react组件进阶目标
1能够使用props接收数据 2能够使用父子组件之间的通讯 3能够实现兄弟组件之间的通讯 4能够给组件添加props校验 5能够说出生命周期常用的钩子函数 6能够知道高阶组件的作用 组件通讯介绍 组件 ...
- 源码解读etcd heartbeat,election timeout之间的拉锯
转一个我在知乎上回答的有关raft election timeout/ heartbeat interval 的回答吧. 答:准确来讲: election是timeout,而heartbeat 是in ...
- AMS 新闻视频广告的云原生容器化之路
作者 卓晓光,腾讯广告高级开发工程师,负责新闻视频广告整体后台架构设计,有十余年高性能高可用海量后台服务开发和实践经验.目前正带领团队完成云原生技术栈的全面转型. 吴文祺,腾讯广告开发工程师,负责新闻 ...
- 初识 Redis 以及其基本使用方法
1.什么是Redis redis 是一个高性能的key-value数据库,它支持的类型更多 包括 string(字符串).list(链表).set(集合).zset(sorted set --有序 ...