windows 10上使用vscode编译运行和调试C/C++ |
您所在的位置:网站首页 › vscode找不到stdio头文件 › 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 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 #include 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.jsontasks.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 using namespace std; void quicksort(int A[],int l,int r){ int m=l; for(int i=l;ivscode集成终端问题 windows 10 1903/1909版本,不能使用cmd(包括cmder),git bash作为默认终端,这两个终端输入clear / cls指令后再关闭终端会造成vscode无响应PowerShell作为默认终端时,虽然不存在clear的问题,但如果往终端输入了任何数据或指令又没有按回车就直接关闭了,同样会造成vscode无响应WSL没有发现类似的bug强迫症治疗 1903及以上版本windows 10,把PowersShell作为默认终端打开时,会显示一条pscore的广告--"尝试新的跨平台 PowerShell https://aka.ms/pscore6"1803/1809版本的则会因为bug显示一堆空白解决方法:唐铭:移除vscode集成终端启动时显示的多余信息 更加完美的解决方法:唐铭:PowerShell 美化及自定义 求赞~ 后记 文章的核心内容均参考微软官方文档mingw部分https://code.visualstudio.com/docs/cpp/config-mingw在评论区或者私信里向我提问的人,大部分问题我都会在摸鱼时回复,但对于文章里已经写的很明白的以及抄别人文章有问题(不是一个两个了)跑来问我的,我一般是不回复的相关内容 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |