vscode调试配置和输出中文乱码,这两个问题是我使用vscode遇到的两个最难解决的也是最重要的两个问题,网上的解答很多都已经过时而且没用,以至于我花费了大量的时间在网上搜寻有用的解决方法,好在是在结合自己的很多次尝试后终于艰难地解决了。
所以我总结了我遇到的问题并写出相应的解决方法,然而每个人电脑的情况都不尽相同,但还是希望对看到的朋友提供一些帮助和解决的思路。下面是我电脑的类型和配置:
下面是本文章所解决的四个问题:
问题一:如何配置原生断点调试和运行?
问题二:如何更改调试和运行环境为vscode内的终端还是系统的cmd终端?
问题三:在vscode内置终端中,如何选择Powershell终端还是cmd终端?
问题四:如何解决输出中文字符乱码的情况?
这个问题指的是在vdscode中可以打断点调试的功能(快捷键是F5),即下图处的功能:
我的建议是:
.vscode
文件夹;.vscode
文件夹中新建tasks.json
和launch.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
}
}
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
}
],
},
]
}
No such file or directory
的错误(例子是将.cpp文件命名为哈哈.cpp
):在launch.json
中设置"externalConsole"
:
"externalConsole": true // true代表在系统终端运行,非,false代表在vscode内置终端运行
直接在vscode的设置中搜索terminal.integrated.defaultProfile.windows
,选择Powershell或Command Prompt
在问题二中,你学会了选择在系统cmd终端和vscode内置终端运行cpp文件,所以该问题要分为两种情况:
因为vscode中新建的的.cpp文件默认是UTF-8的编码,于是调试时会弹出系统cmd终端来运行.exe文件,而cmd终端默认是GBK编码,然后就会中文乱码:
方法一(更改代码文件的编码):
方法二(更改cmd终端的默认编码):
也就是说将cmd的默认编码方式更改为UTF-8
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
目录下:autorun
,值为chcp 65001
,也可以多加一个命令写成chcp 65001 >nul
,写完之后确定。chcp
似乎是change code page的简写,65001
是UTF-8的编码号,而>nul
可以在终端隐藏你刚才的那条命令的输出。system("pause");
.exe
文件时不会使用autorun
里面的命令,而当使用system("pause");
时会激活,使其执行autorun
里的命令。在问题3中你学会了在vscode内置终端中如何选择powershell终端和cmd终端,所以该问题分为cmd终端和powershell终端两种情况:
terminal.integrated.profiles.windows
,然后点击在setting.json中编辑
。在json配置文件中插入两个终端的以下配置信息:
"terminal.integrated.profiles.windows": {
// 配置powershell
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["-NoExit", "/c", "chcp 65001", ">null"]
},
// 配置cmd
"cmd": {
"path": "cmd.exe",
"icon": "terminal-cmd",
"args": ["/K chcp 65001 >nul"]
}
},
下面更改默认打开的终端:
"terminal.integrated.defaultProfile.windows": "cmd"
"terminal.integrated.defaultProfile.windows": "PowerShell",