[全网最全 C语言] VSCode 安装与配置(MSYS2的mingw-w64/GCC 编译环境)

本文地址:  https://www.cnblogs.com/yucloud/p/vs_code_config.html

 

力求完美、详细,望各位留言指点

 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接

本博文被多次转载,而转载文章并不会更新,所以请以本博文为准。另为了表明本博文为原创且有更新,因此博文标题时有变动。

  后续会慢慢增添内容,修正不足。  希望这篇文章能带大家入坑。

                ------------- 博客园  蓝天上的云℡       YuCloud  https://yucloud.cnblogs.com

 Ps.

2021年8月28日 笔试时用了一下,发现按本文配的,F5选G++时候支持C++环境(STL支不支持就不清楚,没试过)

2021年8月2日 更新文章内容,按照 MSYS2 官方教程和VSCode最新版本修正

2021年消息: VSCode官方团队已推出 Makefile Tools 插件,从此支持Makefile项目(包括Linux Kernel)       附上:官方使用说明

2019年消息:VSCODE支持全局配置,C/Cpp插件也支持UI界面设置。(但本质是通过图形界面配置JSON)

2023年消息:VSCode的C/C++插件现在只需要在操作系统安装好gcc和gdb工具链,然后按下F5或者右上角的运行按钮,选择第一个或者第二个就行了

官方Issues 原话如下图

 

 

 

 

 

请耐心看完,这能让您充分了解和理解什么是IDE, 【调试、运行和命令行】,以及系统与程序间的关系

如果只是想找三个文件的配置方法,请点下面导航。(其实这三个文件配置并不难,难的是没用过gcc g++ gdb,当你稍微地使用之后,配置自然是水到渠成)

基本上各平台配置内容的最大差异在于那个include路径,只要写对路径,其他都是小问题

 


 本文理论上全平台GCC通用,其他编译平台请自行变通,毕竟会使用其他平台已经不是新手了。

怎么查看gcc默认的include路径 :

     Linux下是                 gcc -v -x c -E /dev/null 

     Windows下是           gcc -v -x c -E NUL

然后找到gcc编译流程的日志里输出内容中的 #include <...> search starts here:

这里可以参考韦东山的嵌入式编译视频(GCC通用的,分析日志):

https://www.bilibili.com/video/BV1w4411B7a4?p=47&t=470

附上新版UI配置界面的图

 大同小异

 

 

 

以下是正文开始

 


 目录书签导航

  1. 下载安装(2个软件)
  2. 配置MSYS2环境     && 换源
  3. 安装Mingw-w64编译工具
  4. 变量配置
  5. VS Code与MinGw搭配使用

  •  强烈建议先初步学会使用gcc(mingw64)等命令,这样配置才不会一脸懵逼

1,下载安装(2个软件)

VS Code官网:https://code.visualstudio.com/        ps: system installer和user installer的区别就在用于为所有用户/单用户安装。

 

MSYS2官网:https://www.msys2.org                     我电脑系统是Windows 10   x64,所以选择

 

 

2,配置Msys2环境

请搭配这篇文章使用本博文:https://zhuanlan.zhihu.com/p/33751738

MSYS2 是一个在WIndows下提供了 GNU工具链的软件包管理工具,我们用它来很方便地下载安装到最新的编译器

在开始菜单启动MSYS2

 

 

 

输入命令 以更新MSYS2软件列表数据库:(当提示没有更新时即是最新,下同)

pacman -Sy 

更新成功会提示你关闭窗口

 

如果你熟悉vi之类的使用,下载速度太慢,请见 https://mirrors.ustc.edu.cn/help/msys2.html

 

再同步软件源并更新核心软件包

pacman -Syu

 

再更新其他基本软件包

pacman -Su

 

3,安装Mingw-w64编译工具

 

再安装 Mingw64 编译工具链

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

 安装后打开开始菜单里MSYS2 64bit 的"MSYS MinGw 64-bit“,输入gcc -v回车查看gcc版本号,正常则代表安装成功,然后关闭即可

 这时就已经可以使用 gcc 和 make 命令了。

 

 

 

 

 

可选

当然还有其他可选的常用开发环境与工具(初学者不建议,有需要的进阶用户可以安装)

pacman -S  base-devel  git  mercurial  cvs  wget  p7zip  perl  ruby  python2

 

32位Mingw-w64:

pacman -S  mingw-w64-i686-toolchain

 64位Mingw-w64:

pacman -S  mingw-w64-x86_64-toolchain

 

4,变量配置

 打开系统环境变量配置

可以用:win键+右上角的pause键,笔记本用Win+Fn+Pause,或者直接右击我的电脑-属性

然后点高级系统设置-——环境变量(N)

双击系统变量的Path新建 

C:\msys64\mingw64\bin

 

再添加环境变量 HOME

C:\msys64\home\<用户名>

 

据说这个变量很有用,后面配置要多次用到。(注意:<用户名>尖括号表示该内容要填你自己的安装用户名,如我该目录下的是kui就应该填C:\msys64\home\kui

(这里的C:\msys64是Msys2的默认安装路径,如果路径不一样,请自行变通)

 

 

 

重启一下电脑让变量生效(2018年: 变量好像是及时生效的,只要重开cmd窗口就行,变量会在新窗口里生效)

 

然后打开cmd,输入(回显中有HOME和Path变量即可)

set |findstr msys64

 或者

set HOME && Path

 

再输入(回显中有版本号即可)

gcc -v

那么变量配置完成

 

Deepin/Ubuntu/Linux用户

如果你使用的是Deepin/Ubuntu/Linux,那么安装就非常简单了

#安装好gcc工具链和GDB调试器 
sudo apt install -y build-essential gdb 

其他Linux发行版请自行搜索如何安装 gcc和gdb,例如Opensuse用户直接百度:  Opensuse 安装gcc gdb

 

5,VS Code与MinGw搭配使用

 

如果你不是Windows而是Ubuntu/Linux用户,请用 sudo apt install -y build-essential gdb 安装好gcc工具链和GDB调试器

(没有GDB调试器的话,C/C++插件不会识别到配置)

我换了皮肤,界面不一样而已。截图时的版本是 VSCode 1.76.1  C/C++插件版本是v1.15.1 (2023-4-6更新的截图)

 

 然后就会发现调试和运行都可以了

 

 

 

 

 

如果发现配置错了或者运行不了,可以删掉.vscode文件夹再来一遍

 

 

 

6,手动配置法,以下是旧版插件才需要的配置

新版不需要这么麻烦了请跳过。这里是为旧版插件朋友提供的

 

请搭配VS Code官网使用说明:https://code.visualstudio.com/docs/languages/cpp

因为官网有可能更新,且本文不一定完全正确,因此建议读者分屏(WIn键+方向键)同时阅读本文和官网说明

(看不懂英文可以挂梯子使用谷歌网页翻译)

 

 

打开Vscode,会提示你打开一个工作目录(菜单栏 File - Open folder选择你想要项目放置的工作目录即可)

然后新建文件,写好c语言的helloword代码并保存为test.c

注意:文件名和路径目录名一般不能有中文

1 #include <stdio.h>
2 #include <stdlib.h>
3 
4 int main(void) {
5     printf("HelloWorld!");
6     system("pause");
7     return 0;
8 }
test.c

 

安装C / C ++扩展(没有内置编译器) 

  • 单击补充工具栏(侧边栏)上的“扩展视图”图标。
  • 搜索 C/C++ 。
  • 单击“ Install” ,然后单击“ reload to active”

然后任选一种方式配置三个脚本:

 以下配置提供两种方式,任选其一即可。一种通过UI界面配置(推荐新手使用),一种通过JSON脚本配置

 

通过图形界面UI配置

在VS Code里按快捷键 左Ctrl+左Shift+P 【是Shift而非Alt】键入并运行

C/C++:Edit Configurations (UI)

 会看到这个界面,这里是 与编程语言的编译环境有关 的配置

 

 然后我们要去找到这些信息填入,使得VSCode可以和编译器梦幻联动

 

快捷键 Win+X 选择 Windows PowerShell(管理员),输入以下命令回车

gcc -v -x c -E NUL

 

 把 #include <...> search starts here: 下面的几个路径复制出来(图中红框标记的)

复制出来去掉空格后填到图中4.的部分

然后其他的

平台:下拉选 Win32

编译器路径:下拉选有gcc.exe的那项

代码感知模式:下拉选择 windows-gcc-x64

includePath: 把 #include <...> search starts here: 下面的几个路径复制出来(图中红框标记的),复制出来去掉空格后填到图中4.的部分

 

结果如图

 

然后切换到c源文件那里,

 按下F5调试编译,选择 GDB 那项(这个是自动生成调试脚本

 

再选第一项(即刚才配置的带gcc.exe的编译器路径)即可 (这个是自动生成编译脚本

 

然后会弹出这个界面,不要修改,直接如图 关闭该文件即可

 配置完成了,我们测试一下

 打个断点再调试

 至此配置完成,新手无需再往下看了,进阶用户请继续看下面的

PS. 如果配置配错了,可以删掉 .vscode 目录下的 launch.json 和 tasks.json,然后从第5部分的 5,VS Code与MinGw搭配使用 重新配置 

 

 

通过JSON脚本配置

1. 用于编译环境的脚本配置(头文件、宏、编译器平台等)

也就是 c_cpp_properties.json,这个脚本用于配置编译环境

 

在VS Code里按快捷键 左Ctrl+左Shift+P 【是Shift而非Alt】键入并运行

C/C++:Edit Configurations (JSON)

 

可参考这两篇文章 整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux) - 一苇以航 - CSDN博客

Visual Studio Code 如何编写运行 C、C++ 程序? - 知乎用户的回答 - 知乎 

 

此时会生成第一个JSON文件:

[ JSON 是一种存储和交换文本信息的语法,类似 XML。但更小更快,便于 JS 解析(因为 VSCODE 是JS写的)]

 

c_cpp_properties.json

修改内容如下(注意,这个文件不允许使用注释):

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/include",
                "D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../include",
                "D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/include-fixed",
                "D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64",
            "compilerPath": "D:/msys64/mingw64/bin/gcc.exe"
        }
    ],
    "version": 4
}
.vscode\c_cpp_properties.json

 

更新一下说明:当需要第三方SDK如Npcap/WinPcap时,请在includePath自行添加

另外Linux常用的头文件getopt.h位置在

"C:\\msys64\\mingw64\\x86_64-w64-mingw32\\include"
还有,VSCODE和VS一样支持引用环境变量(系统环境变量和VSCODE内置变量)
VSCODE内置变量如   "${workspaceFolder}/**",   这句是默认的include配置内容,会指定搜索工作目录下的头文件等
includePath   就是#include预处理器搜索路径
defines   一些定义,用于条件编译,和编译时的flag有关
compilerPath 编译器所在完整路径
c/cppStandard是c/cpp语言标准如c11 c++17
intelliSenseMode 是代码智能感应模式,通过研究关键词去看懂脚本(#无奈脸),
如果不太清楚,可以补一下gcc 相关知识/或者学着用gcc编译(善用搜索引擎)或者看看官方资料,
 
看不懂也没关系,请慢慢来,不着急(我前几个月看的时候也是完全不懂的,现在看懂很多了)

VSCODE内置变量 https://code.visualstudio.com/docs/editor/variables-reference

 

 

 

[很明显,上面这部分完全是 gcc配置各种路径 的知识] 不过gcc g++编译器是有区别的,如果用C++还是推荐g++

 

2. 用于启动/调试程序的脚本配置

也就是 launch.json,这个脚本用于启动和调试程序,其中 preLaunchTask 用于调用编译脚本

 

1. 单击补充工具栏(侧边栏)上的“Debug”图标

2. 点击 配置图标,可选方案有如下:

  1.  C++ (GDB/LLDB) (to use GDB or LLDB)
  2. C++ (Windows) (to use the Visual Studio Windows Debugger) from the Select Environment drop-down list.

This creates a launch.json file for editing with two configurations:

  • C++ Launch defines the properties for launching your application when you start debugging.
  • C++ Attach defines the properties for attaching to a process that's already running.

Update the program property with the path to the program you are debugging.

If you want your application to build when you start debugging, add a preLaunchTask property with the name of the build task you created in tasks.json ("build hello world" in the example above).

 

如果看得懂英文,请看这里官方详细:

(其实就几个单词,并不难,请试着读懂它)↓↓↓

vscode-cpptools/launch.md at master · Microsoft/vscode-cpptools

然后会生成第二个文件:

 launch.json

官方资料参考

修改内容如下:

{

    //${workspaceFolder} - /home/your-username/your-project
    //${workspaceFolderBasename} - your-project
    //${file} - /home/your-username/your-project/folder/file.ext
    // ${relativeFile} - folder/file.ext
    // ${fileBasename} - file.ext
    // ${fileBasenameNoExtension} - file
    // ${fileDirname} - /home/your-username/your-project/folder
    // ${fileExtname} - .ext
    // ${lineNumber} - 5
    // ${selectedText} - Text selected in your code editor
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc.exe - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "D:/msys64/mingw64/bin",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\msys64\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc.exe build active file"
        }
    ]
}
.vscode\launch.json

 

 

[这部分完全是  GDB、cmd命令行知识、全局环境变量、利用脚本启动其他exe 的知识]

至于变量的使用,看微软文档:https://code.visualstudio.com/docs/editor/variables-reference

 

 

3. 用于编译的Task脚本配置

tasks.json,这个脚本用于编译,会在调试之前启动

还是,快捷键 左Ctrl+左Shift+P键入并运行     

Tasks: Configure Task

 

然后点击“Create tasks.json file from templates”再选择“Others”,

会生成第三个文件:

tasks.json

 

修改内容如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe build active file",
            "command": "D:/msys64/mingw64/bin/gcc.exe",
            "args": [
                // "-std=c11"
                "-fexec-charset=GBK",
                "-Wall",
                "-static-libgcc",
                
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "D:/msys64/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}
.vscode\tasks.json

 

 

 

 

[完全是 gcc命令行工具 的知识]

-fexec-charset=GBK 这个参数是gcc编译器用来处理中文字符显示问题的,
      更多gcc参数的使用https://www.cnblogs.com/zhangsir6/articles/2956798.html 或者查看GNU官方文档

然后,看到"label"了吗?

这个配置的值就要和之前在launch.json里的那个"preLaunchTask"的值一样,例如:

          "preLaunchTask": "gcc"  //  [launch.json文件里的]
     "label" : "gcc"        //  [tasks.json  文件里的]
因为preLaunchTask意思是:在此之前启动指定task

 

当然你可以变通使用 Task 里的 command 和 args,例如改成 make命令之类的以实现调用 MakeFile 编译什么的

 

既然是入门,就一步步手动来,这样能更了解IDE的执行过程(这也许也是微软想带给我们的),很有价值的。

 必应网页翻译VSCode官方文档结果:https://www.translatetheweb.com/?from=en&to=zh-CHS&dl=en&a=https%3A%2F%2Fcode.visualstudio.com%2Fdocs%2Flanguages%2Fcpp


 

 

目录结构如下

“项目目录”

+.vscode目录

  ++ c_cpp_properties.json

  ++ launch.json

  ++ tasks.json

+多个c源文件*.c

 按下编译快捷键F5会编译当前打开的单个文件(比如同时开了1.c 2.c但是光标选中的是2.c,那么就只编译2.c)

 

这样就初步配置完成了,如果需要更高级的功能,请查看微软Visual Studio Code的文档

每次使用都需要先打开“项目”目录,然后该IDE会读取.vscode子目录配置文件。

因此我们可以将配置好的.vscode目录备份起来,以后要新建“项目”,直接就把该目录放置到“项目”目录,然后打开"项目"目录即可。

当然,这三个文件也适用于VS2017最新版 对 Visual Studio 中 C++ 生成系统的“打开文件夹”支持 | Microsoft Docs

 

附上:

 在VScode上配置Git - 知乎 

 

VSCode插件之Code Runner (只能run不能调试)

附上Code Runner解决运行程序中文乱码问题的方案

https://www.cnblogs.com/yucloud/p/10259681.html#VSCode_zh

 

6,让Msys2更顺手

Msys2 更舒适的配置https://www.jianshu.com/p/0e24ee498f2b

 

 

PS. VScode编译单个源文件特别方便,用来和VS2017互补非常棒。(虽然VS2017新版也实现了和c/cpp插件一样地利用JSON自动化编译)

 最后附上:Cygwin、MinGw、mingw-w64,MSys msys2区别与联系 - zengkefu - 博客园

 

其实这三个文件的配置,把鼠标悬浮在配置上面,vscode会告诉你作用和值范围,这些都很简单的,难的是自身英文水平 和使用搜索引擎的能力

假如把vscode给的那短短的docs都读懂,把c语言gcc编译器的参数、预编译命令等知识都搜索一遍,那配置就轻而易。(当然我都做不到,或者说不愿意去做,emmm......)

 

 

使用 Makefile 

方式1. 新插件,VSCode官方团队推出专为Makefile工程解析的 Makefile Tools 插件,从此不需配置麻烦的环境,只需要写好Makefile需要的变量即可(强烈推荐,支持Linux Kernel工程)

    官方使用说明:https://devblogs.microsoft.com/cppblog/now-announcing-makefile-support-in-visual-studio-code/ 

 

方式2. 新建 .vscode/tasks.json 并填入以下内容,Makefile 则用项目里需要的,这里贴个 Linux 内核交叉编译的例子

{
     "version": "2.0.0",
      "tasks": [
        {
          "type": "shell",
          "label": "Build",
          "command": "cd ${fileDirname} && make",
          "group": {
            "kind": "build",
            "isDefault": true
          },
          "presentation": {
            "echo": true,
            "reveal": "always",
            "focus": true,
            "panel": "shared",
            "showReuseMessage": true,
            "clear": false
          },
          "problemMatcher": [
            "$gcc"
          ]
        }, {
          "type": "shell",
          "label": "clean",
          "command": "cd ${fileDirname} && make clean",
          "presentation": {
            "echo": true,
            "reveal": "always",
            "focus": true,
            "panel": "shared",
            "showReuseMessage": true,
            "clear": false
          }
        }
      ]
    }
tasks.json
# 模块驱动,必须以obj-m=xxx形式编写
obj-m = hello.o

KDIR = ../../linux
CROSS = ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

all:
    $(MAKE) -C $(KDIR) M=$(PWD) $(CROSS) modules

clean:
    $(MAKE) -C $(KDIR) M=`pwd` $(CROSS) clean


#VSCode 里按 CTRL+SHIFT+B 即可调用本 Makefile 编译
#也可以在VSCode 菜单里点 Terminal -> Run Task... 或者 Run Build Task



Makefile教程参考:韦东山的嵌入式视频,非常实用易懂,也是大工程里 Makefile 编译常见的写法  https://www.bilibili.com/video/BV1w4411B7a4?p=48


然后在 VSCode 里,按 CTRL+SHIFT+B 即可调用本 Makefile 编译 也可以在VSCode 菜单里点

Terminal -> Run Task... 或者 Run Build Task

 

附LINUX的glibc找不到标准库函数源码的解决方案

glibc问题(Linux) 

如果你在Linux上配置VSCode,单步调试时就会发现一个报错:Unable to open 'malloc.c': File not found (file:///build/glibc-kAz5Pl/glibc-2.27/malloc/malloc.c). 之类的提示,

注意: 这里的 glibc-kAz5Pl 最后一个字母是小写的 L (即 jklmn 的 l )

记得安装 gdb 哦(apt install gdb && apt-mark auto gdb)

解决方案有两种:

1. [在kali下使用gdb以源码方式调试glibc](推荐,debian系通用)然后把glibc-2.27复制到VSCode要求的目录 build/glibc-kAz5Pl/ 里即可

2.  就是在glibc下载网站搜索build/后面那段glibc-2.27,然后下载并解压到根目录下的build目录(没有就自己建) {没找到gnu的镜像源,只能默默忍受dns污染和墙体的光辉了}

另外参考 怎么查看gcc默认的include路径 :

     Linux下是                 gcc -v -x c -E /dev/null 

     Windows下是           gcc -v -x c -E NUL

      然后找到输出内容中的 #include <...> search starts here:

 然后c_cpp_properties.json的 includePath 如下

"includePath": [
                "/usr/lib/gcc/x86_64-linux-gnu/7/include",
                "/usr/local/include",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
                "/usr/include/x86_64-linux-gnu",
                "/usr/include",
                "${workspaceFolder}/**"
],

 

 

关于glibc(好像又称LLD)  :

由于 glibc (GNU C Library) 比 libc(ANSI C Library) 更符合 Linux, 所以 glibc 渐渐成为 Linux 的"标准库", 而 libc 渐渐不再维护

参考: [libc、glibc和glib的关系]

 

 


 

解答

1. MSYS2 是什么,它和 Cygwin 的区别?

答,MSYS2更好,请看官网介绍:

 

 

 

 

 

 

 


 

关于学习的理念

学习编程,最好就是对工具和整体都有一个正确、完整的理解。从命令行理解是最好的,因为你能一步步地理解程序执行的过程,再加以调试,基本上整个软件层面都能透彻理解。

比如HelloWord.c 你可以开始使用命令行理解它

 

 1 #include <stdio.h>
 2 // 这是一个HelloWorld演示 
 3 
 4 int main(void) {
 5     int a = 2019; 
 6     int c = a - 1949;        // 我们在exe里看不到c的值的,因为没有打印出来,
 7                             //但是我们可以用调试器获取这个值
 8     printf("Hello World!");
 9     return 0;
10 }
HelloWorld.c

 

(tab键盘可以部分智能猜测路径/命令补全)

编译方面

请先配置好 MingW64

[cmd] cd /d E:\MySource\    定位到HelloWorld所在路径E:\MySource\ 

[cmd] gcc HelloWorld.c -o HelloWorld.exe  使用gcc[Mingw64] 编译HelloWorld.c并输出为HelloWorld.exe

[cmd]  ./HelloWorld.exe          在当前已经定位路径,启动HelloWorld.exe,这个就是运行

调试方面

[cmd] gcc -g HelloWorld.c -o HelloWorld.exe    重新编译一次,这次用了-g参数,给exe里加上了调试信息,以便于gdb使用

[cmd] gdb HelloWorld.exe            使用gdb进行调试,由于上面加上了调试信息,所以我们能看到

(gdb) break 1        把断点打在源码第1行,不懂的话可以打help看帮助

(gdb) r           Run的简写,运行

(gdb) n            Next的简写,下一行

你可以一直执行到int c = a - 1949 的下一行开头即 printf("Hello World!");

(gdb) info local a      查看和变量a相关的值

会显示:

        a = 2019
        c = 70

怎么样,好玩吧!这个就是调试

当然你还可以查看汇编源码:

 quit退出

 

这个过程你已经了解了:

在Windows里双击运行exe时,系统帮你做了什么(当然是简化版,实际上Windows还有一些安全措施之类的)

    它先定位到路径,然后才运行。

在计算机里,程序是一步步运行的

    所以调试能让你快速理解程序和编程,也能让你看到每个数据的变化

当然还有很多有趣的东西,多线程什么的原来不是真正的同步执行,命令行参数原来离我们学生学C语言并不远,仅仅是学校没有教而我们也不愿意去探索去看国外优秀经典书籍如C Primer Plus  请看链接:C程序获取命令行参数   想了解更多有趣的东西,可以看我其他博文,虽然没有这篇好,但是也导出了很多探索路线

拥有思想理念地去编程,会给你带来一个不一样、精彩的世界观

附上:Linux下gdb的安装及使用入门

拓展学习(就算不学也建议仔细了解一下):

  1. 习惯常用的命令操作,理解图形化的思想(做到不讨厌命令行也不小看图形化,把命令行和图形化操作看作同一地位,这样的思维对 个人进步 和 工程开发  大有脾益)
  2. gdb           是C/C++调试器,也是众多衍生语言(如Java)的调试器基础,学会gdb,就能熟悉各种编程语言、IDE的调试
  3. Makefile    一种针对复杂工程自动化编译的脚本文件,有利于理解各种IDE原理
  4. git             分布式版本控制工具
  5. Linux        因为这些gcc、gdb都是从Linux移植过来的,Windows原生编译调试器好像只有MSVC
  6. 学会使用第三方的库,如npcap、Mysql的C api等(需要相关的知识体系,如网络或数据库的一点点知识)

     如果想写命令行程序,见 main函数的参数(int argc,char *argv[]) 或参考书籍《C Primer Plus 第五版》

本文关键词检索:Windows , Windows10 , Win10 , MSYS2 , MinGw , MinGw-w64 , .vscode ,  c_cpp_properties.json , launch.json , tasks.json , VScode , 写c , c语言 , Visual Studio Code

posted @ 2018-11-24 16:49  蓝天上的云℡  阅读(24798)  评论(9编辑  收藏  举报