本文先介绍了windows下 VSCODE运行C++前,搭建C++运行环境的必要步骤。后介绍了tasks.json
、launch.json
的作用,并给出了自己使用的配置方案。最后给出了常见问题的解决措施。
在安装VScode后,还需要:
C/C++
插件。\MinGW
,并添加相应的\MinGW\bin
到系统环境变量中。.vscode
目录下,添加task.json
和lunch.json
文件。main.cpp
文件后,点击F5
即可实现运行。不了解这个过程的话,可以查看ZHIHU: Visual Studio Code 如何编写运行 C、C++ 程序?.
看例子前,请先了解:
tasks可以被用来做编译,通过F1→run task
来运行编译任务。
在tasks.json
中,你将在这里设置:(部分罗列)
"label": "Build",
launch 用来运行结果,包括但不限于run、debug、compile。可通过F5
运行最近的launch选项,在左边调试栏或左下角选择具体的launch选项。
"preLaunchTask": "Build",
,preLaunchTask
的属性值为tasks.json
中label
的属性值。name
控制。想要更具体的了解task.json
、launch.json
和》json
,可参考:vscode官网
官网中对面向具体编程语言的一些可选项属性的说明较少,只能是参见其他博客了。
给出自己用的文件:
lunch.json:
// launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"preLaunchTask": "Build",
"type": "cppdbg",
"request": "launch",
"program": "${env:windir}\\System32\\cmd.exe",
"args": [
"/C","${workspaceFolder}/main.exe", "&", "pause"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/Program Files/CodeBlocks/MinGW/bin/gdb.exe",//根据本地路径修改
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "DBG",
"preLaunchTask": "Build",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main.exe",
"args": [ ],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:/Program Files/CodeBlocks/MinGW/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build", // 任务的名字叫Build,注意是大小写区分的,等会在launch中调用这个名字
"type": "shell", // 任务执行的是shell命令,也可以是
"command": "g++", // 命令是g++
"args": [
"'-Wall'", "-g",
"'-std=c++17'", //使用c++17标准编译
"${workspaceFolder}/*.cpp", //当前文件名
"-o", //对象名,不进行编译优化
"'main.exe'", //当前文件名(去掉扩展名)
],
// 所以以上部分,就是在shell中执行(假设文件名为filename.cpp)
// g++ filename.cpp -o filename.exe
"group": {
"kind": "build",
"isDefault": true
// 任务分组,因为是tasks而不是task,意味着可以连着执行很多任务
// 在build组的任务们,可以通过在Command Palette(F1) 输入run build task来运行
// 当然,如果任务分组是test,你就可以用run test task来运行
},
"problemMatcher": [
"$gcc" // 使用gcc捕获错误
],
}
]
}
下面不显示整个文件,只列出相关属性及值,提供检查。
launch.json
下:
"program": "${env:windir}\\System32\\cmd.exe",
"args": [
"g++","/C","${fileDirname}/${fileBasenameNoExtension}.exe", "&", "pause"
],
"externalConsole":true
反之,若要直接运行a.exe,并在vscode中显示,则:
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
launch.json
下:
运行前都加断点:
"stopAtEntry": false,
运行结束后暂停:
"args": ["/k", "${fileDirname}\\${fileBasenameNoExtension}.exe", ],
或者:
"args": [
"g++","/C","${fileDirname}/${fileBasenameNoExtension}.exe", "&", "pause"
],
main.exe
运行在tasks.json
文件下:
"command": "g++", // 命令是g++
"args": [
"'-Wall'",
"'-std=c++17'",
"${workspaceFolder}/*.cpp",
"-o",
"'main.exe'",
],
在launch.json
文件下
"program": "${fileDirname}/main.exe",
在launch.json
文件:
"MIMode": "gdb",
"miDebuggerPath": "c:/MinGW/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}]
可执行文件中,还需要添加调试信息,断点设置才会生效。
在tasks.json
,即:
"args": [ "g++", "-g",```];
Q: 符号编码与乱码问题
A: 详见我的另一篇博客符号编码与乱码问题
Q: 程序include
了,但编译通过,但CMD无输出。双击out.exe
输出 无法定位程序输入点 ZNSt6thread15 M Sta rt threadESt10unique ptrINS 6 StateESt14defa ult deleteIS1 EEPFvvE 于动态链接库 C:WsersXFunnyZhangXDocumentsXVsCodeCppXtest.exe 上 。
A: 我把C:\mingw64\bin
环境变量加到了用户变量
中,而不是系统变量
中。vscode下编译时可以从用户变量中读取,但运行可执行程序时,可执行程序获取不到响应的thread动态库。因此只要把环境变量改到系统变量
中即可。
Q:无法将“g++”项识别为 cmdlet、函数、脚本文件或可运行程序的名称?[-]
A: 排除没有将g++添加到环境变量的问题后,可将vscode以管理员方式运行。