vscode 在windows下使用gcc+mingw调试 c/c++程序

这里将介绍配置Visual Studio Code以使用GCC C ++编译器(g ++)和GDB调试器来创建和调试在Windows上运行的程序。

  1. 安装VS Code的C/C++扩展。可以通过在扩展视图中搜索“c++”来安装C/C++扩展(Ctrl+Shift+X)。
image1.png
  1. 通过MSYS2获取最新版本的Mingw-w64,该软件提供了GCC,Mingw-w64和其他有用的C++工具和库的最新本地版本。可以从MSYS2页面下载最新的安装程序,或使用此链接到安装程序

  2. 按照MSYS2网站上的Installation说明安装Mingw-w64。

  3. 安装Mingw-w64工具链(pacman -S --needed base-devel mingw-w64-x86_64-toolchain)。在MSYS2终端中运行pacman命令。接受默认值以安装toolchain组中的所有成员。

  4. 使用以下步骤将Mingw-w64的bin文件夹的路径添加到Windows的PATH环境变量中:例如路径:C:\\msys64\\mingw64\\bin

检查您的MinGW安装

要检查您的Mingw-w64工具是否正确安装并可用,请打开一个msys2命令的终端提示符并键入:

gcc --version
g++ --version
gdb --version

  1. 如果您没有看到预期的输出或g++gdb不是已识别的命令,请确保您的PATH条目与编译器所在的Mingw-w64二进制位置匹配。如果编译器不存在于该PATH条目中,请确保您遵循了MSYS2网站上的说明安装Mingw-w64。
  2. 如果gcc有正确的输出但gdb没有,则需要从Mingw-w64工具集中安装您缺少的软件包。
    • 缺少mingw-w64-gdb软件包是尝试编译时出现“miDebuggerPath的值无效”的消息的原因之一,如果您的PATH正确,则需要安装软件包。

添加 hello world 示例程序

现在粘贴以下源代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg) {
        cout << word << " ";
    }
    cout << endl;
}

运行 helloworld.cpp

  1. 打开 helloworld.cpp,使其成为活动文件。

  2. 单击编辑器右上角的三角形按钮。


    image2.png
  1. 从系统检测到的编译器列表中选择C/C++:g++.exe build and debug active file
image3.png

只有在第一次运行 helloworld.cpp 时才会要求您选择编译器。此编译器将作为“默认”编译器设置在 tasks.json 文件中。

  1. 构建成功后,程序的输出将出现在集成的终端中。
    image4.png

第一次运行程序时,C++ 扩展将创建 tasks.json,可以在项目的 .vscode 文件夹中找到它。tasks.json 存储构建配置。

新 tasks.json 文件应类似于以下 JSON:

{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++.exe build active file",
      "command": "C:\\\\\\\\msys64\\\\\\\\mingw64\\\\\\\\bin\\\\\\\\g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\\\\\\\${fileBasenameNoExtension}.exe"
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ],
  "version": "2.0.0"
}

Debug调试

调试跟vscode使用其他调试工具没什么差别,

  • 如设置断点的行,再运行Debug。
image5.png

使用launch.json自定义调试

使用播放按钮或F5进行调试时,C ++扩展会即时创建动态调试配置。

有些情况下,你希望自定义调试配置,例如指定在运行时传递给程序的参数。可以在launch.json文件中定义自定义调试配置。

要创建launch.json,请从以下设置中选择“添加调试配置”。

image6.png

然后,将看到各种预定义的调试配置的下拉列表。选择C/C++: g++.exe build and debug active file

image7.png

VS Code将创建一个名为launch.json的文件,其外观类似于以下内容:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++: g++.exe build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\\\\\\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\\\\\\\msys64\\\\\\\\mingw64\\\\\\\\bin\\\\\\\\gdb.exe",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C/C++: g++.exe build active file"
    }
  ]
}

在上面的 JSON 中,program指定您想要调试的程序。在此,它设置为活动文件夹(${fileDirname})和具有.exe扩展名的活动文件名称(${fileBasenameNoExtension}.exe),如果helloworld.cpp是活动文件,则为helloworld.exeargs属性是要在运行时传递给程序的参数数组。

默认情况下,C++扩展不会向您的源代码添加任何断点,stopAtEntry的值为false

stopAtEntry的值更改为true,以使调试器在开始调试时停在main方法上。

从现在开始,播放按钮和F5将从您的launch.json文件中读取,以便在进行调试时启动程序。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容