【vscode调试配置、输出中文乱码解决】关于VSCode的C++原生断点调试debug和运行的配置和中文乱码的问题(非code runnner)

vscode调试配置输出中文乱码,这两个问题是我使用vscode遇到的两个最难解决的也是最重要的两个问题,网上的解答很多都已经过时而且没用,以至于我花费了大量的时间在网上搜寻有用的解决方法,好在是在结合自己的很多次尝试后终于艰难地解决了。
所以我总结了我遇到的问题并写出相应的解决方法,然而每个人电脑的情况都不尽相同,但还是希望对看到的朋友提供一些帮助和解决的思路。下面是我电脑的类型和配置:
在这里插入图片描述

  • C++使用的是mingw64

下面是本文章所解决的四个问题:

问题一:如何配置原生断点调试和运行?
问题二:如何更改调试和运行环境为vscode内的终端还是系统的cmd终端?
问题三:在vscode内置终端中,如何选择Powershell终端还是cmd终端?
问题四:如何解决输出中文字符乱码的情况?


问题一:如何配置原生断点调试和运行?

这个问题指的是在vdscode中可以打断点调试的功能(快捷键是F5),即下图处的功能:
在这里插入图片描述
我的建议是:

  1. 直接在你的工作区的目录新建一个.vscode文件夹;
  2. .vscode文件夹中新建tasks.jsonlaunch.json两个文件;
  3. 粘贴下面的两段到这两个文件中(因为我这个也是粘贴别人的):
  • tasks.json:(不用更改,直接复制即可)
{
    
    
        "version": "2.0.0",
        "command": "g++",
        "args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}.exe"
        ],
        "problemMatcher": {
    
    
            "owner": "cpp",
            "fileLocation": [
                "relative",
                "${workspaceRoot}"
            ],
            "pattern": {
    
    
                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        },
        "group": {
    
    
            "kind": "build",
            "isDefault": true
        }
}
  • launch.json:(需要更改miDebuggerPath中的值为你的mingw64的gdb.exe的位置,gdb.exe在mingw中的bin文件夹下,注意\要改成\\来避免转义字符)
{
    
    
        "version": "0.2.0",
        "configurations": [
            {
    
    
                "name": "C/C++",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}/${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": true, // true为选择外置终端、false为选择vdcode内置终端
                "MIMode": "gdb",
                "miDebuggerPath": "D:\\My_Software\\mingw64\\bin\\gdb.exe", // 这里要替换成你的mingw64的gdb.exe的位置,不要写成gcc,这个是debug的exe
                "preLaunchTask": "g++",
                "setupCommands": [
                    {
    
    
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                 
            },
        ]
}
  1. 千万要注意代码文件命名!!! 你的.cpp的代码文件还有mingw的目录和文件名一定不要出现中文或者其他非英文数字下划线的字符!!尽量符合C/C++语言的变量命名规范,否则会出现No such file or directory的错误(例子是将.cpp文件命名为哈哈.cpp):
    error
  2. 然后你就按F5可以试着打断点进行调试了(有什么问题可以留言……我也可能不会太懂,但如果遇到过这个情况兴许可以解决)

问题二:如何更改调试和运行环境为vscode内的终端还是系统的cmd终端?

launch.json中设置"externalConsole"

"externalConsole": true // true代表在系统终端运行,非,false代表在vscode内置终端运行

问题三:在vscode内置终端中,如何选择Powershell终端还是cmd终端?

  1. 直接在vscode的设置中搜索terminal.integrated.shell.windows,然后点击在setting.json中编辑:(注意搜索出的结果描述有“终端在Windows上使用的shell的路径(默认…)”,可以得知在我的电脑中内置终端默认是powershell),于是我可以选择将其更改为cmd。
    在这里插入图片描述
  2. 更改为cmd终端:
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",

问题四:如何解决输出中文字符乱码的情况?

在问题二中,你学会了选择在系统cmd终端vscode内置终端运行cpp文件,所以该问题要分为两种情况:

第一种是 系统cmd终端乱码 的情况(要讲的方法对所有UTF-8文件系统终端输出中文乱码的方式都使用):

因为vscode中新建的的.cpp文件默认是UTF-8的编码,于是调试时会弹出系统cmd终端来运行.exe文件,而cmd终端默认是GBK编码,然后就会中文乱码:
乱码
在这里插入图片描述
方法一(更改代码文件的编码):

  • 因为vscode默认新建文件是UTF-8编码,而cmd终端默认用的是GBK棉麻,所以你可以通过将UTF-8编码转换成GBK编码,就可以解决输出中文乱码的问题。
    1. 点击右下角的UTF-8
      在这里插入图片描述
    2. 选择通过编码保存:在这里插入图片描述
    3. 找到GBK编码并选择,然后就可以正常输出中文了。
      在这里插入图片描述

方法二(更改cmd终端的默认编码):
也就是说将cmd的默认编码方式更改为UTF-8

  1. 打开注册表:
    在这里插入图片描述
  2. 进入到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor目录下:
    在这里插入图片描述
  3. 右键-新建-字符串值, 名称为autorun,值为chcp 65001,也可以多加一个命令写成chcp 65001 >nul,写完之后确定。chcp似乎是change code page的简写,65001是UTF-8的编码号,而>nul可以在终端隐藏你刚才的那条命令的输出。
    在这里插入图片描述
  4. 然后这个时候你兴高采烈地以为就可以解决了,但是再去调试的时候,会发现仍是乱码,而且你的输出还被莫名其妙地覆盖了
    在这里插入图片描述
    那这该怎么解决呢???
    答:在main函数开头再加一段system("pause");
    在这里插入图片描述
    根据我的观察,会出现这种情况的原因是因为cmd执行.exe文件时不会使用autorun里面的命令,而当使用system("pause");时会激活,使其执行autorun里的命令。
  5. 到此为止这个问题就解决了。

下图是>nul的作用:
在这里插入图片描述

第二种是 vscode内置终端 乱码的情况

在问题3中你学会了在vscode内置终端中如何选择powershell终端和cmd终端,所以该问题分为cmd终端和powershell终端两种情况:

  • 首先无论怎样呢,我们要先在setting.json里配置相关的信息:
    • 直接在vscode的设置中搜索terminal.integrated.shellArgs.windows,然后点击在setting.json中编辑

设置 terminal.integrated.shellArgs.windows的值根据终端种类的不同而不同:

  1. 你的vscode内置终端为cmd终端:
"terminal.integrated.shellArgs.windows": ["/K chcp 65001 >nul"],
  1. 你的vscode内置终端为powershell终端
"terminal.integrated.shellArgs.windows": [
        "-NoExit",
        "/c",
        "chcp 65001",
        ">null",
    ],

猜你喜欢

转载自blog.csdn.net/MYMarcoreus/article/details/113845647