20/2/27
和往常一样照着@谭九鼎 老哥的方法配置vscode的C环境的时候,第一步就出了问题。
原因是他教程里指定下载的那个文件是x64的,而我系统是x86。
知道问题了也就有办法解决了,然后就发现认不出哪个是x86的(绝
然后又想了些有意思的东西,花了点时间弄出来了,就写个笔记。
20/3/10
更新:解决了编译时会跳到终端的问题(纯属眼瞎),编译出错时无法定位的问题(之前没给当回事)。
都改在tasks.json,所以修改的就都写在原来下面了。
正文
1.先是下MinGW,链接
x64的下 x86_64-posix-seh
x86的下 i686-posix-dwarf
2.设置环境变量
例如:E:\mingw32\bin
设置好了后要重启,重启后cmd键入 gcc -v 验证MinGW版本
3.VSCode装插件
- C/C++:又名 cpptools,提供Debug和Format功能
- Bracket Pair Colorizer 2:彩虹花括号
4.配置launch.json
写个hello.c然后按f5调试,选有GDB的那个,生成个launch.json,如下。
1 { 2 // 使用 IntelliSense 了解相关属性。 3 // 悬停以查看现有属性的描述。 4 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 { 8 "name": "gcc.exe build and debug active file", 9 "type": "cppdbg", 10 "request": "launch", 11 "program": "C:\\Windows\\System32\\cmd.exe", //这两行的说明在下面 12 "args": ["/c .vscode\\ConsolePauser.exe exe\\${fileBasenameNoExtension}.exe"], 13 "stopAtEntry": false, 14 "cwd": "${workspaceFolder}", 15 "environment": [], 16 "externalConsole": false, //改成true 17 "internalConsoleOptions":"neverOpen", //这条加的,终端貌似还是会打开 18 "MIMode": "gdb", 19 "miDebuggerPath": "E:\\mingw32\\bin\\gdb.exe", 20 "setupCommands": [ 21 { 22 "description": "为 gdb 启用整齐打印", 23 "text": "-enable-pretty-printing", 24 "ignoreFailures": true //这个改成false 25 } 26 ], 27 "preLaunchTask": "gcc.exe build active file" 28 } 29 ] 30 }
第11行的原本是打开编译好的程序,这里是改成打开cmd。
第12行是传递给程序的命令行参数。【/c】是让cmd执行完就关闭窗口。
【ConsolePauser.exe】是从Dve-C++里偷的,为了美观放在.vscode里了,参考的链接,下载地址。
编译输出的可执行文件都放在exe里。
5.配置tasks.json
上面那个整好再按f5调试就会弹出
选配置任务,再
{ // 有关 tasks.json 格式的文档,请参见 // https://go.microsoft.com/fwlink/?LinkId=733558 "version": "2.0.0", "tasks": [ { "type": "process", "label": "gcc.exe build active file", "command": "E:\\mingw32\\bin\\gcc.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}\\exe\\${fileBasenameNoExtension}.exe", //中间加个exe "-static-libgcc", //加的,好像是什么静态链接 "-Wall" //加的,检查错误啥的好像 ], "options": { "cwd": "E:\\mingw32\\bin" }, "problemMatcher": [ "$gcc" ], "presentation": { "echo": true, "focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义 "panel": "shared" // 不同的文件的编译信息共享一个终端面板 }, "group": { "kind": "build", "isDefault": true // 不为true时ctrl shift B就要手动选择了 }, } ] }
到此就基本完成了
---更新---
1."agrs"里的:"-static-libgcc", "-Wall" 两句不知道干啥用的,都给注释掉了。
2."presentation" 里加了个 "reveal": "never", 作用是编译时不会跳转到终端,谭九鼎的那篇里有写,之前可能没注意给略过了。
3.研究指针的时候发现:编译报错没法定位到代码位置,原因是问题匹配器指向的文件路径不知为何会出现重复
百度出的解决方法是改"problemMatcher",原本的"problemMatcher"下只有个"$gcc",先给换成VSCode官网给的模板
"problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "${workspaceFolder}"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 }
},
再把"owner": "cpp"的"cpp"给改成"c","fileLocation"的"${workspaceFolder}"给改成"\\"
再把编辑器重启问题就解决了。
6.总结
刚开始就x86是哪个没搞懂折腾了一会,然后就老毛病复发又想整点活(笑
1.实现了吧exe都放在一个文件夹里
2.实现了不用再加语句就能在最后暂停程序,并报个不知道什么时间(
3.不过编译的时候还是会自动从问题跳到终端,不过这个用快捷键Ctrl+Shift+M跳回问题算勉强解决了吧