linux/windows_vscode_配置mingw的C/C++环境(by official doc)/一些可能遇到的问题和对策)/vscode中文输出乱码问题

19 篇文章 0 订阅

preface

for windows

初学者还是建议用visual studio 2019+或其他版本,它们体积虽庞大,但是调试功能无比强大,变量类型,变量内存情况,调用堆栈,强大的调用层次分析

for linux

linux下使用vscode可以执行一些简单的编译,可以搭配手写编译命令/makefile/或者其他编译命令行生成工具

references

官网提供的配置教程(vscode+cpp):

https://code.visualstudio.com/docs/cpp/config-mingw

官方文档简述

  • (利用默认生成的配置文件,快速配置环境)
    私以为官方文档写的相当详实,且较为全面,一步一步的教授读者配置,相当好的一份文档,可以优先跳转到官方文档进行学习

网络上的其他相关配置文章大多不如官方介绍的那样好,那样全面

目录名要求

以下配置在文件(及其路径名中纯英文下可行,中文会引发出错)
但还是可以运行中文名cpp编译的源程序(主要是调试会有问题)
可以考虑将文件名重命名为英文

相关配置文件及含义

tasks.json (build instructions)
launch.json (debugger settings)
c_cpp_properties.json (compiler path and IntelliSense settings

从windows开始

创建task.json配置文件(build instructions)

创建tasks.json文件是为了下次执行编译任务(run build task.)的时候不需要再次选择编译器.
同时方便配置launch.json,便于配置单步调试

requirement

vscode cpp 插件

在这里插入图片描述

Mingw
  • 在系统环境变量(Path)变量中配置编译器所在路径,使得命令行中可以直接调用gcc或者g++
  • 当然,如果还安装了visual stuido(比如vs2019),那么可以使用vs提供的编译工具

在这里插入图片描述

检查g++/gcc

g++ -v
在这里插入图片描述

file1:生成tasks.json

在这里插入图片描述

或者
在这里插入图片描述

  • 接着,您检查一下.vscode目录下的文件是否包括:
    task.json
修改task.json的内容(optional)

这一步不是必须,具体字段参看文档
值得关注的是,字段lable,譬如"label": "C/C++: gcc build active file",,该字段的值将在后续的launch.json中引用,来使得项目(launch.json能够指引vscode找到正确的task.json进行编译源代码
总之,这个名字和后续提到的launch.json中的"preLaunchTask"字段取值一致即可
譬如,这里提到的两个字段可以都取: "C/C++: gcc build active file",

然后准备一个测试代码c/c++

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    { 
        cout << word << " ";
    }
    cout << endl;
}

调试

在合适的地方打下断点:

在这里插入图片描述

  • 如果之前您的mingw环境可用(#include头文件正常)
    那么可以就可以调试啦(task.json)的内容会自动生成,
  • 现在,您按下ctrl+shift+b(command palette 中执行run build task ),执行task.json

在这里插入图片描述

终端和调试控制台

需要交互的控制台点击terminal选项卡输入(not debug console)
在这里插入图片描述

此时您应当在当前目录下得到一个.exe文件(可以用于调试)
此时具有最基本功能,但还不方便,编译完的程序还要手动选择并运行(F5)

创建&编写launch.json(调试配置文件)

使用launch.json使得编译调试一气呵成

在这里插入图片描述
或者
在这里插入图片描述

Note:在2022年的时候,我重新试了官方文档的流程,发现在配置launch.json的时候,生成的模板是空的,
没关系,只需要将下文提供的模板粘贴到launch.json中(该模板来自参考文档),在修改"preLaunchTask": 字段的值使得其与task.json中提到的lableh值一致即可,如果恰好一致就不用改

  • 您可以手动在.vscode目录下创建一个launch.json
  • 也可通过点击图标创建
  • 在这里插入图片描述
    手动编写过程中有模板提示

在这里插入图片描述

我的launch.json (for windows)

根据我的Mingw(g++),生成的launch.json:
这样子生成的我文件目录是配好的,也可以根据文档的字段解释进行参数修改
主要是MinGw中的gdb程序文件目录:miDebuggerPath以及preLaunchTask编译配置文件名称(label in task.json)

 {
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "D:\\MinGW64\\bin",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\MinGW64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe build active file"
        }
    ]
}
选择调试工具/环境

在这里插入图片描述
如下结果视vscode版本和c++插件版本的不同而异,如果有第一项最好(第二项也可以)选择之后,即可使用
还可以自行配置其内容
在这里插入图片描述

task.json和launch.json的关系

F5运行launch.json,launch.json会执行task.json指定的任务(作为launch.json的预执行任务(编译c/cpp得到可执行文件),然后执行launch的主体任务(运行得到的可执行文件)
这体现在launch.json中的"preLaunchTask": "C/C++: g++.exe build active file"

可选的c_cpp_properties.json

C/C++ configurations#
您可以在这里选中/切换编译器种类,且配置完毕后将vscode重启(如果为未能立即看到效果),以便使变更生效

在某些时候,该配置很有用,比如您要使用自己编写的头文件/库(或则来自其他人便携的相关程序,在此处更改即可)
在这里插入图片描述

If you want more control over the C/C++ extension, you can create a
c_cpp_properties.json file, which will allow you to change settings
such as the path to the compiler, include paths, C++ standard (default
is C++17), and more.

You can view the C/C++ configuration UI by running the command C/C++:
Edit Configurations (UI) from the Command Palette (Ctrl+Shift+P).

在这里插入图片描述

result

在这里插入图片描述

中文输出会乱码?

如果您使用cmd作为默认vscode的terminal,可能再输出中文时会乱码
如果时windows10以上的系统,已经自带powershell(但自带版本太老,还是很肯能会乱码)
现在建议您安装powershell7+的新版本作为默认的terminal
然后再安装一个oh my posh 主题,配上Nerd Font字体,您就可以看到上图中的效果,而且不会中文输出时就乱码
在这里插入图片描述
在这里插入图片描述
new posh (with Hack Nerd Mono Font):
在这里插入图片描述

linux + vscode c/c++

  • 由于linux安装的gcc/g++/gdb位置比较统一,配置起来会稍微更方便一些
  • 总体流程几乎一样

MinGw细节(optional)(for windows user):

1.首先是到官网下载MinGw installer 安装文件(比较慢)(或者其他自带mingw的ide,比如DEV-cpp)
网站有时比较慢,下载也比慢;(可能要访问外网)
考虑第三方下载;
https://wws.lanzoui.com/i7ncnr1855g
密码:hg9b

将文件解压到某个你熟悉的路径

正式开始配置前,请把之前产生的该目录下的.vscode文件夹删除,(里面的.json文件删除)
已以免旧文件和配置操作产生新文件引起冲突

此外,如果要使用code runner插件来编译.c文件,那么注意配置C99编译:

详情可以看:

https://blog.csdn.net/xuchaoxin1375/article/details/111644789
这个链接的文章对code runner插件运行c++(C可以做类似的修改)配置做了源文件名的容错优化,基本解决了因为文件名包含空格,小数点等非标识符组成字符带来的异常.!!!
但是,如果要调试,那么依然不能包含中文

比如:下图。里边有个重要的bin文件夹

在这里插入图片描述

将该路径复制;以便配置环境变量

在这里插入图片描述

配置环境变量(用户变量/环境变量任意配置一个即可;)双击粘贴刚才复制的路径

在这里插入图片描述

检测:

在键盘上按win+R:再输入cmd
在这里插入图片描述

输入g++,如果g++弹出以下内容,说明配置成功;

在这里插入图片描述

或者使用g++ -v:(查看g++版本)

弹出非报错内容即为成功
在这里插入图片描述

建立规范的目录

现在,可以在你喜欢的任意地方建立一个不含中文,注意不含中文的规范名字(当然,如果包含中文,那么虽然您可以编译运行,但是gdb就无法调试了(基于Microsoft C++或许可以),的文件夹(最好满足变量标识符的命名规则的文件夹,)然后用vscode打开这个文件夹
编写一个简单的hello world程序:

#include<iostream>
using namespace std;
int main()
{
    cout<<"hello,world"<<endl;
    cout<<1+1<<endl;
}

在这里插入图片描述

然后按F5,开始调试,会弹出:

在这里插入图片描述

注意,如果您在某个已有和调试.json文件相关的文件(launch.json),那么应当将其备份后删除,然后在添加全新的调试文件:
这种情况可能发生在之前没有成功的配置文件残留下来的
可能是您在某个其他类型语言的工程目录下开始本教程,不过您可以通过如下界面来规避上述两个问题:
点开debug,选择合适的调试配置json文件(这里没有c/c++的调试配置文件(只有python的配置文件):

Add Configuration:
在这里插入图片描述
在这里插入图片描述

然后选择对应的调试配置文件
在这里插入图片描述

在这里插入图片描述

选择编译器完毕后

在左侧出现文件夹.vscode 里面有launch.json和task.json
在这里插入图片描述
如果mingw的路径发生变化,那么可以修改launcher.json和tasks.json中的路径:
在这里插入图片描述

(到这里基本可以使用了,但还不是很方便,输出的内容要从终端选项卡转到调试控制台console那里去看结果)
在这里插入图片描述

想要根据直观的从弹出的终端中查看调试过程中打印的信息,可以再做如下配置:打开左侧里的launch.json文件;
在这里插入图片描述
如果程序因为错误编译不通过;
在这里插入图片描述
正确程序的正常调试:
在这里插入图片描述

为了结果一闪而过,建议在程序中的合适位置打断点!;

如果,此前已经安装了最新版(5.15)的DevC++
那么. vscode文件夹中的launch.json和task.json就是
一步到位的.

在这里插入图片描述
在这里插入图片描述
立即修改如下选项,才可以正常使用:(true)
在这里插入图片描述
当然你可能还需要最新版本的vscode配合.在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值