Vscode配置C语言问题

写在最前,本篇文章是针对Windows系统上gdb调试失败问题的,有关完整配置教程,直接参见末尾的参考资料。

Vs code配置C语言

最近需要用到C,但是VS太大了,对付一般小项目有点大材小用,所以请出小巧的Vs Code,自带markdown书写,插件居多,很好用就是了。
那么,配置C/C++该怎么搞呢?

  1. 下载vs code
  2. 下载MinGW
  3. 配置json文件
  4. 代码测试

下载vs code

这一步无需多言,打开必应搜vs code即可(当然用百度也不拦着,就是需要找一下官网)。
具体网址:https://code.visualstudio.com/

下载MinGW

注意,不要下载官网的MinGW,下载后经过检查是失败的,见下面launch.json的配置。因此使用的是dev c++中的MinGW,直接下载dev c++即可。把相应的MinGW的bin目录添加到环境变量中即可
ZQdj0J.png

配置json文件

其实没必要新建c工程,再依次生成json,再进行修改,而是直接新建相应的json文件即可。
有三个json文件:

  • c_cpp_properties.json
  • launch.json
  • tasks.json

然后是具体配置:

  • c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "8.1",
            "compilerPath": "D:\\MinGW\\bin\\gcc.exe",  //MinGW的bin目录下的gcc.exe路径
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}
  • launch.json
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",// 被调试程序
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\DevC++\\Dev-Cpp\\MinGW64\\bin\\gdb.exe",  // 自己电脑的gdb
            "preLaunchTask": "echo",                      // 在调试前需要执行的任务名称
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

注意上面的miDebuggerPath,因为到后面,本人发现只要是从官网下载下来的MinGW,写成该路径,断点调试后总会跳出下图所示的错误。
ZQZDgK.png

经过一番搜索,在stackoverflow上找到了答案,这里为了方便大家,截图解决方案。
ZQZ09x.png

意思是gcc版本不对,必须使用64位的。
那么用官网的为什么不行呢?在源程序添加断点后,在Terminal中输入gdb test.c,得到以下提示:
ZQZB36.png

原来自带的是32位的,问题就是出在这里,但我目前确实没找到用哪个才是64位的
所以换个思路,不就是需要MinGW吗?除了官网还有许多替代品,因此还有许多可选选项
正好本人电脑上有dev c++,于是直接用的自带的gcc编译器,结果通过了。
有大佬能解答下最好。

  • tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "gcc",  //c语言用gcc,c++用g++
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileBasenameNoExtension}.exe"
            ],
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}

至此,json文件就配置完成了。

代码测试

输入以下代码:

#include <stdio.h>

int main()
{
    printf("This is a test!");
    int i = 0;
    int j = 1;
    int k;
    k = i + j;
    printf("\n k");
    system("pause");      // 防止一闪而过
    return 0;
}

结果截图:

额外的说明

多啰嗦几句。
其实,单纯编译运行c程序的话只需要gcc就可以;同理,单纯编译运行C++程序的话只需要g++就可以了。gdb只是为了调试用

于是有人就会问,可是vs code只有调试按钮啊,如果安装了官网下载的MinGW,只要按了F5,就会unable to start debugging ···,怎么直接运行呢?
很简单,用最原始的命令行解决。

命令行编译运行c程序

首先,新建一个C程序,命名为test.c,然后编写。
接着,在Terminal中输入gcc test.c -o test,意思是编译test.c文件,生成test.exe
然后,再在终端输入test,即可看到输出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ehDyQ6r-1584689739764)(https://s2.ax1x.com/2019/06/29/ZQZrjO.png)]

总结

vs code配置c/c++的方法基本一致,都是下载完之后,将其添加到系统环境变量,再配置相关的json文件即可。本人出问题的时候搜索了大量的教程,也遇到了按照教程配置结果出问题的朋友。比如

  • 错误,退出代码为1
  • 任务被重用(讲道理,这个不算错误,配置没问题的话是可以正常运行的)
  • 错误,退出代码为2
  • 错误,启动调试失败(unable to start debugging…)

个人建议还是搜索错误的关键字,有条件就google,没条件就Bing,百度作最后的备选,相信可以在各种博客、github、代码社区找到相应的问题解决方案。
这里本人遇到的是启动调试失败,然后使用dev c++的MinGW就成功了。

参考资料

  1. 暮无雪代码博客
  2. stackoverflow上关于调试失败问题的解答
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值