当前位置: 首页 > 科技观察

一篇带你用VSCode调试C代码的文章

时间:2023-03-12 05:30:16 科技观察

1。前言首先说明vscode是代码编辑器,不是编译器,不能自己编译C语言。这里我们使用MinGW-w64作为C语言编译器。MinGW-w64的前身是MinGW的全称:MinimalistGNUonWindows。它实际上是将经典的开源C语言编译器GCC移植到了Windows平台上,并且包含了Win32API,因此可以将源代码编译成可以在Windows上运行的可执行程序。并且还可以在Linux平台下使用一些Windows没有的开发工具。一句话概括:MinGW是Windows版的GCC。我们这里使用的MinGW-w64是MinGW的升级版。MinGW只能编译32位程序,而MinGW-w64可以编译64位和32位程序。MinGW已经停止更新了,所以大家还是要用MinGW-w64。MinGW-w64推荐从官网下载:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/。下载绿色版,下载速度快。下载windows的安装版,一般是下载失败。所以为了演示绿色版的安装过程,绿色版只需要添加环境变量,将绿色版解压到D盘根目录,如下:按照步骤添加环境变量。测试是否安装了MinGW-w64。2.编译C代码接下来,将使用MinGW-w64编译C代码。上面说了,MinGW-w64是Windows版的gcc,所以gcc是直接编译C代码的。在D盘新建目录C,并在目录C新建main.c文件,代码如下:#include#includeintmain(){charname[100];printf("你叫什么名字?\n");scanf("%s",名称);printf("你好,%s,很高兴认识你!\n",name);}这是一个简单的C程序。接下来使用window的cmd编译运行这个C程序。用windows的powershell编译也是一样的结果。3.vscode编译以上演示了如何使用MinGW-w64编译C代码。vscode只需要调用这些命令来编译C代码。那么vscode插件就可以优雅的解决这个问题了。Coderunner是一款优秀的编译插件。因为我们的C代码使用了scanf,需要在终端中输入,所以需要开启coderunner的RunInTerminal功能。安装插件后,右侧会出现一个运行按钮。单击运行按钮编译并运行C代码。注意下图1,其实就是调用gcc的命令,和我们上面说的一样。一个类似的插件是C/C++编译运行插件。没有插件就编译不了???当然vscode可以自己调用gcc,自己完成代码的编译,选择Run->Runinnon-debuggingmode。这里我们只是编译C代码然后运行它。下面将讨论调试问题。选择C++(GDB/LLDB)和C/C++:gcc.exe生成活动文件。看终端输出如下(我下图并排显示两个终端,默认不显示)。这里可以看到,vscode运行两个终端,一个编译C语言,一个运行C程序。并生成如下两个文件:launch.json用于C语言文件启动调试时提供配置参数。tasks.json是编译C语言的任务。关于报错,下面做一个简单的错误,在终端给出错误的位置。这是gcc给出的错误,也就是导致编译失败的错误。但是下图的错误是vscode认为你出错了,提醒你。并不是所有vscode报告的错误都会被gcc认为是有问题的。而vscode给出的错误一般都与安装的插件有关。我们专注于gcc错误。4、多文件编译上面已经完成了C的编译运行,但是只是一个文件,一般情况下通常会有多个文件。我们有如下源代码来验证多文件编译。//main.c#include#include"a.h"intmain(void){intnumber;printf("输入:\n");scanf("%d",&number);打印你好();if((number>1)&&(number<=100)){printf("小\n");}elseif((number>101)&&(number<=200)){printf("Middle\n");}else{printf("大\n");}return0;}//a.c#include#include"a.h"voidprintHello(void){printf("Helloworld");}//a.h#ifndef__A_H_#define__A_H_voidprintHello(void);#endif首先使用coderunner,运行结果如下:可以看出coderunner只编译了main.c,编译报错找不到a.c中的printHello函数。修改coderunner的扩展配置ExcutorMap,点击前面的小齿轮,选择:copysettingsasJSONtext。然后点击settings.json中的编辑。打开文件settings.json如下。其中一行代码是我们启用runInTerminal的配置,并将我们刚刚复制的内容粘贴到它的下一行。注意第1点需要加逗号,第2点的$fileName改为*.c,如下:保存文件,返回main.c,执行codecunner的run按钮,你可以看到在编译gcc的时候,所有的文件都是编译的c源文件。看到这里大家应该明白配置文件和执行的gcc命令之间的关系了吧。针对上面提到的vscode也可以自己编译的问题,如何在不使用插件的情况下编译多个文件呢?上面提到task.json编译C程序,其配置如下:同样,${file}可以修改为*.c,编译多个C文件。这里就不演示了。5.调试调试非常简单。调试前需要保证编译时没有问题(虽然这句话像废话)。在其他IDE中,可以直接debug调试,但是在VScode中,建议先编译,首选保证Compiled。因为配置了vsode的编译环境,可能会出现问题。如果编译失败,将无法调试。编译程序后,选择main.c,直接选择Run->StartDebugging。其余部分与普通IDE没有太大区别。自动查看变量。手动检查变量。调用堆栈信息。断点可以像任何其他IDE一样被打破。分别是运行、单步、进入函数、退出函数、复位、停止等常用调试按钮。终端界面。