vscode调试C/C++的.vscode配置

vscode C/C++的.vscode配置

Author: mikudouble
Created Time: April 4, 2022 7:44 PM
Significance: ⭐⭐⭐

0、注意事项

💡 我是在windows10下配置的,其他平台不一定有效

💡 看本文前请先安装好MinGWvscode,以及vscode中的C/C++插件

💡 项目文件夹和源文件不要有中文或者特殊符号

💡 项目所在路径不要有中文或者特殊符号

💡 本文看完后,可以去看一下我的另一篇文章:vscode关于C/C++编译运行的一些小配置

1、生成.vscode调试配置

先建立好基本的目录结构与源代码文件,建立两个文件夹: includesrc ,所有的.h文件都放在 include 目录下,所有的.cpp文件都放在 src 目录下。

  • 目录结构

    在这里插入图片描述

  • 示例代码

    • main.cpp

      #include <iostream>
      #include "../include/Sales_item.h"
      
      using namespace std;
      
      int main() {
          Sales_item item1, item2;
      
          item1.isbn = "0-201-78345-X";
          item1.units_sold = 10;
          item1.revenue = 300.0;
      
          cout << item1.avg_price() << endl;
      
          item2.isbn = "0-201-78345-X";
          item2.units_sold = 2;
          item2.revenue = 70;
      
          cout << item2.avg_price() << endl;
      
          if (item2.same_isbn(item1)) {
              cout << "same" << endl;
          } else {
              cout << "not same" << endl;
          }
      
          return 0;
      }
      
    • Sales_item.h

      #ifndef __SALES_ITEM_H_
      #define __SALES_ITEM_H_
      
      #include <string>
      
      class Sales_item {
      public:
          // 常量成员函数
          // 由于这个函数不对类的数据成员做任何修改,所以可以定义为常函数【参数列表后面加上const】
          bool same_isbn(const Sales_item &rhs) const {
              // this->isbn = "1";  // 错误,常函数不能修改数据成员
              return this->isbn == rhs.isbn;
          }
      
          double avg_price() const;
      
      public:
          Sales_item() : units_sold(0), revenue(0) {}
      
          // 本来应该将成员变量设为private的,但是为了方便,写成public
      public:
          std::string isbn;
          unsigned units_sold;
          double revenue;
      };
      
      #endif  // !__SALES_ITEM_H_
      
    • Sales_item.cpp

      #include "../include/Sales_item.h"
      
      // 类外定义成员函数体,需要加上类作用域,即类的名字
      double Sales_item::avg_price() const {
          if (!this->units_sold) {
              return 0;
          } else {
              return this->revenue / this->units_sold;
          }
      }
      
  1. 打开源代码main.cpp,按 F5 ,然后选择第一项 C++ (GDB/LLDB)

    在这里插入图片描述

  2. 然后选择 C/C++: g++.exe 生成和调试活动文件...

    在这里插入图片描述

  3. 由于我的代码是分成多个文件,所以vscode不能直接处理,此时会报错(如果源文件只有一个main.cpp,那么这里就不会报错)。现在选择 打开"launch.json" ,并仍然选择 C++ (GDB/LLDB) ,你会发现生成了 .vscode ,并且这个文件夹下面有 launch.jsontasks.json 两个文件

    1. vscode报错

    在这里插入图片描述

    在这里插入图片描述

    b. 生成了 launch.jsontasks.json 两个文件

    在这里插入图片描述

  4. 打开 tasks.json ,将 "args": [ ... ] 中的 "${file}", 注释掉,并在下面添加一行 "${fileDirname}\\*.cpp", ,表示编译的文件是源文件main.cpp所在文件夹下的所有.cpp文件,具体的可以看下图。

    然后注意一下这个 "label" 标签的值 "C/C++: g++.exe 生成活动文件" ,它是编译源文件这个任务的名称,下一步会用到。

    另外也可以看看下面的的两个参数 "-o","${fileDirname}\\${fileBasenameNoExtension}.exe" ,这表示编译生成的可执行文件的名字是main.exe(因为源文件名是main.cpp),并且生成的位置就在源文件main.cpp所在的同一个文件夹。这里你可以选择修改生成的可执行文件的文件名和它的文件路径,我现在选择不做修改。

    在这里插入图片描述

  5. 打开 launch.json ,点击右下角的 添加配置 ,选择 C/C++: (gdb) 启动 ,在生成的代码中添加一行 "preLaunchTask": "C/C++: g++.exe 生成活动文件", ,这就是第4步tasks.json 中那个 "label" 的值,"preLaunchTask" 代表预启动的任务,表示每次调试或运行之前就会先对源文件进行编译

    另外,你也可以选择不添加 "preLaunchTask": "C/C++: g++.exe 生成活动文件", ,这样的话,就需要运行程序前先对程序进行编译,编译的快捷键是 ctrl+shift+B ,然后才能 ctrl+F5 运行或 F5 调试。

    在这里插入图片描述

    在这里插入图片描述

  6. launch.json 中,"program" 标签需要的参数是可执行文件的路径。在第4步中我们提到生成可执行文件的位置就在源文件main.cpp所在的同一个文件夹。因此,这里的 "program" 的值改为 "${fileDirname}\\${fileBasenameNoExtension}.exe"

    在这里插入图片描述

  7. 下面的 "args": [] 标签代表传递给程序的命令行参数,如果main()函数需要命令行参数,可以在这里添加。在本例中不需要命令行参数,所以不做修改

  8. 再看下面的 "miDebuggerPath" 标签,它表示调试程序(如gdb)的路径,将你的gdb路径添加进去即可(gdb的路径在MinGW的bin目录下)

    在这里插入图片描述

  9. 现在大功告成!返回 main.cpp 就可以开始运行或者调试了

    在这里插入图片描述

    在这里插入图片描述

2、最终的 .vscode 配置文件

  • 不要直接照搬我的,有些需要你自己修改

  • launch.json

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "preLaunchTask": "C/C++: g++.exe 生成活动文件",
                "name": "(gdb) 启动",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${fileDirname}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "D:\\bc\\environment\\mingw64\\bin\\gdb.exe",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    },
                    {
                        "description": "将反汇编风格设置为 Intel",
                        "text": "-gdb-set disassembly-flavor intel",
                        "ignoreFailures": true
                    }
                ]
            }
        ]
    }
    
  • tasks.json

    {
        "tasks": [
            {
                "type": "cppbuild",
                "label": "C/C++: g++.exe 生成活动文件",
                "command": "D:\\bc\\environment\\mingw64\\bin\\g++.exe",
                "args": [
                    "-fdiagnostics-color=always",
                    "-g",
                    // "${file}",
                    "${fileDirname}\\*.cpp",
                    "-o",
                    "${fileDirname}\\${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "${fileDirname}"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "detail": "调试器生成的任务。"
            }
        ],
        "version": "2.0.0"
    }
    
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值