windows 10上使用vscode编译运行和调试C/C++
更新于2020/6/30
不值得观看的v1.x版本链接:
链接
请不要转载,欢迎点赞,收藏,分享
主要讲如何在vscode上实现 编译 / 运行 / 调试 C以及C++,如果是初学者,就请完全按照文章的步骤进行, 如果觉得图片不够清晰,点击一下图片会显示清晰的大图
一、前期准备
-
首先在
微软官网
下载并安装好
visual stdio code
,建议在安装时将选项全勾选上
勾选后在文件和文件夹的右键菜单中会多出
Open with Code
这个选项,也就是用vscode打开当前文件/文件夹
2. 因为vscode只是一个代码编辑器,没有自带有C/C++的编译器,因此首先需要安装一个C/C++编译器并且设置环境变量,这里使用 mingw-w64 。因为网络问题mingw-w64很难下载,建议离线下载然后手动添加环境变量
离线下载的地址:
为节省篇幅,具体的细节参见 :
此时我们要验证一下mingw是否可用,
打开cmd输入gcc -v
,出现版本信息就表明mingw是可用的,如果未出现版本信息则需要再检查一下,如果这里出现问题,后面全部无法进行
3. 安装必要的插件,打开vscode,点击左面竖排第五个按钮,搜索并安装上如下三个插件
- chinese(simplified)
- C/C++
- Code Runner
安装好以后重启一下vscode,界面切换为中文,为了避免麻烦,暂时不要安装其他插件
二、编译运行程序
编译运行程序介绍两种方法
-
使用之前安装好的
Code Runner插件
一键编译运行程序 -
打开vscode的
集成终端
使用命令行编译和运行
点击:文件>新建文件 ,出现一个空白文档,将下面的代码复制粘贴到空白文档中
#include <stdio.h>
int main(){
char name[100];
printf("What is your name?\n");
scanf("%s",name);
printf("Hello,%s,nice to meet you!\n",name);
}
然后按
Ctrl+S
将文件后缀名改为
.c
或
.cpp
后保存到电脑上,然后点右上角的三角形按钮
但现在会出现下面的情况
程序段中使用了
scanf
函数从键盘读取一串字符,这时无法输入数据,也无法结束程序,需要重启一下vscode
然后依次打开:
文件>首选项>设置>用户>拓展>Run Code Configuration
找到
Run In Terminal
勾选上
现在程序已经可以正常运行了,此时程序是运行在vscode的集成终端上,并不会额外弹出一个外部窗口
点击右上角的 垃圾桶 图标可以直接结束程序运行并关闭集成终端
替补插件:
编译运行C/C++也可以选择
C/C++ Compile Run
插件,按f6一键运行
相较于
code runner
,
C/C++ Compile Run
插件在勾选上:文件>首选项>设置>扩展>Compile Run Configuration的
Run-in-external-terminal
选项后可以出现和dev / codeblocks / vc一样的外部窗口
用插件运行程序是一种偷懒的方法,它本质是替用户输入了命令,它存在局限, 看一个例子
假设说我们在代码中使用了
winsock2.h
这个头文件,我们用刚刚的
Code Runner插件
的方式编译会无法通过
#include <winsock2.h>
#include <stdio.h>
int main(){
SOCKET client_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
printf("Compile successfully!");
}
造成问题是原因是:Code Runner是按照预先设定好的规则,自动在终端执行编译运行的指令,也就是图片上红色下划线标注出的
g++ Untitled-1.cpp -o Untitled-1 ;
如果是使用了
winsock2.h
,同时又是使用
gcc/g++
编译,在编译时我们应该在编译指令中额外添加
-lwsock32
指令,而
Code Runner
默认下并不会添加这条指令
正确的编译指令应该是:
g++ xxx.cpp -o xxx.exe -lwsock32
为了解决这个问题,可以使用比较原始的方法, 直接在终端上用命令行编译和运行, vscode有一个集成终端,可以连通安装在操作系统上的各种终端
按
Ctrl+~
打开集成终端(其实是"`",打"~"是方便大家找到),输入
g++ .\文件名.cpp -o 文件名.exe -lwsock32
./文件名.exe
三、调试程序
当程序遇到bug,我们可以单步调试来定位错误,vscode支持添加断点,添加监视,显示鼠标指向变量的值,调试控制台查询变量值,详细细节我录制了一个演示视频(内容是快速排序)
使用vscode调试程序示范 https://www.zhihu.com/video/1144198738565242880更加高清的视频可以看上传到b站的版本
进入正题
首先在电脑上的某个你习惯的位置新建一个文件夹(工作区),用于存放将要编写的代码,接下来配置好的调试环境, 仅会对存放在这一个文件夹以及文件夹的子目录里的程序生效
务必注意!
调试的
文件名
和
文件路径
中不能出现
中文字符!!
否则将无法启动调试!
这是由于调试用到的mingw中的gdb不支持中文路径!和vscode无关,下面是两个
错误示范
新建好文件夹后,在vscode界面,点击:
文件>打开文件夹
,用vscode打开刚刚新建的文件夹(安装时勾选了右键打开可以直接右键选
通过code打开
)
在vscode资源管理器点击新建文件夹图标新建一个
.vscode
文件夹(注意前面的"."号)
然后在.vscode文件夹下新建两个json文件分别叫做
- launch.json
- tasks.json
然后将下面的代码复制到对应的json文件中去并保存,要仔细阅读后面两段说明性文字
launch.json
{
"version": "0.2.0",
"configurations": [
"name": "C/C++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"preLaunchTask": "compile",
"setupCommands": [
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
tasks.json
如果需要是c语言
也就是gcc
将下面的command
项由g++
改为gcc
如果是多文件编译(即函数声明和函数定义分开,不懂的别乱改),需要将args列表中的"${file}"
项修改为"${workspaceFolder}/*.cpp"
,多文件推荐用cmake
{
"version": "2.0.0",
"tasks": [
"type": "shell",
"label": "compile",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
"problemMatcher": [
"$gcc"
"group": {
"kind": "build",
"isDefault": true
}
事实上现在已经可以正常调试了,并且现在可以按 ctrl+shift+b 直接调用配置好的task编译而不运行程序,类似于一些IDE的编译选项
测试一下,新建一个
.cpp
文件将下面的代码粘贴进去,并在适当的地方添加上断点
#include <bits/stdc++.h>
using namespace std;
void quicksort(int A[],int l,int r){
int m=l;
for(int i=l;i<r;i++){
if(A[i]<A[r]){
swap(A[i],A[m]);
++m;
swap(A[m],A[r]);
if(m>l+1)quicksort(A,l,m-1);
if(m<r-1)quicksort(A,m+1,r);
int main(){
int A[10];
for(int i=0;i<10;i++) A[i]=10-i;