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. 读写属性 ...
随机推荐
- 如何在代码层面提供CPU分支预测效率
关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...
- C++逆向 可变参数Hook
目录 C++逆向 可变参数Hook 0x00 前言: 0x01 C++可变参数: 可变参数简介 可变参数代码实战 0x02 逆向分析C++可变参数原理 0x03 printf Hook实战 Pwn菜鸡 ...
- Python学习笔记: getpass module: 安全输入密码
使用场景 使用input()函数接收用户输入的时候会将用户输入回显,对于密码肯定是不适用的.标准库里面有getpass module提供了安全输入不回显 getpass module有2个函数 get ...
- Bootstrap Blazor 模板使用(一)Layout 组件
原文链接:https://www.cnblogs.com/ysmc/p/16197223.html BootstrapBlazor 官网地址:https://www.blazor.zone Boots ...
- xpath & csv文件读写
原理:拿到网页源代码并且进行分析 关键词:etree .xpath a[@href="dapao"] a/@href text() impo ...
- GO语言学习——切片三 append()方法为切片添加元素、切片的扩容策略、使用copy()函数复制切片、从切片中删除元素
append()方法为切片添加元素 注意:通过var声明的零值切片可以在append()函数直接使用,无需初始化. var s []int s = append(s, 1, 2, 3) append( ...
- [笔记] $f(i)$ 为 $k$ 次多项式,$\sum_{i=0}^nf(i)\cdot q^i$ 的 $O(k\log k)$ 求法
\(f(i)\) 为 \(k\) 次多项式,\(\sum_{i=0}^nf(i)\cdot q^i\) 的 \(O(k\log k)\) 求法 令 \(S(n)=\sum_{i=0}^{n-1}f(i ...
- .NetCore Hangfire任务计划
安装Hangfire 新建ASP.NET Core空 项目,.Net Core版本3.1 往*.csproj添加包引用,添加新的PackageReference标记.如下所示.请注意,下面代码段中的版 ...
- 【软件构造】Mutable类型与Immutable类型
[软件构造]Mutable类型与Immutable类型 1.前言 在软件构造这门课中,对mutable类型和immutable类型的深入理解,有助于后续ADT.可维护性.可复用性的学习,因此我们有必要 ...
- linux网络配置,查看IP地址
linux等等学习参考博客:https://www.cnblogs.com/pyyu/p/9276851.html 1.在安装好的linux上面输入cd /etc/sysconfig/network- ...