首页 > 编程语言 >用VSCode和CMake编写调试C/C++

用VSCode和CMake编写调试C/C++

时间:2022-10-11 21:46:11浏览次数:53  
标签:cmake VSCode C++ windows build CMake options 调试 BUILD

  • VSCode配置编译任务与调试对象
    在配置的时候会用到一些vscode的变量,用${}包裹起来的那些。
    ${workspaceFolder}是当前工作空间(或vscode所打开根文件夹)在操作系统中绝对路径
    ${workspaceFolderBasename}是当前工作空间(或vscode所打开根文件夹)的名称

    tasks.json 这是VSCode任务的配置文件,通过配置它可以快速执行各种命令。这里我们利用它来配置编译构建流程。我们要执行的任务为建立build文件夹,在build文件夹中使用CMake生成并编译。通过这个任务配置,统一全平台下的程序编译命令

    {
        // See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "version": "2.0.0",
        "tasks": [
            { // 在根文件夹中执行创建文件夹build的命令
                // 除windows系统外执行的命令为`mkdir -p build`
                // windows系统是在powershell中执行命令`mkdir -Force build`
                "label": "build_dir",
                "command": "mkdir",
                "type": "shell",
                "args": [
                    "-p",
                    "build"
                ],
                "windows": {
                    "options": {
                        "shell": {
                            "executable": "powershell.exe"
                        }
                    },
                    "args": [
                        "-Force",
                        "build"
                    ],
                }
            },
            { // 在build文件夹中调用cmake进行项目配置
                // 除windows系统外执行的命令为`cmake -DCMAKE_BUILD_TYPE=<Debug|Release|RelWithDebInfo|MinSizeRel> ../`
                // windows系统是在visual stuido的环境中执行命令`cmake -DCMAKE_BUILD_TYPE=<Debug|Release|RelWithDebInfo|MinSizeRel>  ../ -G "CodeBlocks - NMake Makefiles"`
                "label": "cmake",
                "type": "shell",
                "command": "cmake",
                "args": [
                    "-DCMAKE_BUILD_TYPE=${input:CMAKE_BUILD_TYPE}",
                    "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON", // 生成compile_commands.json 供c/c++扩展提示使用
                    "../"
                ],
                "options": {
                    "cwd": "${workspaceFolder}/build",
                },
                "windows": {
                    "args": [
                        "-DCMAKE_BUILD_TYPE=${input:CMAKE_BUILD_TYPE}",
                        "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON",
                        "../",
                        "-G",
                        "\"CodeBlocks - NMake Makefiles\""
                    ],
                    "options": {
                        "shell": {
                            // "executable": "C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat",
                            // 需要根据安装的vs版本调用vs工具命令提示符
                            "executable": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat",
                            "args": [
                                "${input:PLATFORM}", //指定平台
                                "-vcvars_ver=${input:vcvars_ver}", //指定vc环境版本
                                "&&"
                            ]
                        }
                    },
                },
                "dependsOn": [
                    "build_dir" // 在task `build_dir` 后执行该task
                ]
            },
            { // 在build文件夹中调用cmake编译构建debug程序
                // 执行的命令为`cmake --build ./ --target all --`
                //  windows系统如上需要在visual stuido的环境中执行命令
                "label": "build",
                "group": "build",
                "type": "shell",
                "command": "cmake",
                "args": [
                    "--build",
                    "./",
                    "--target",
                    "all",
                    "--"
                ],
                "options": {
                    "cwd": "${workspaceFolder}/build",
                },
                "problemMatcher": "$gcc",
                "windows": {
                    "options": {
                        "shell": {
                            // "executable": "C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat",
                            "executable": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat",
                            "args": [
                                "${input:PLATFORM}",
                                "-vcvars_ver=${input:vcvars_ver}",
                                "&&"
                            ]
                        }
                    },
                    "problemMatcher": "$msCompile"
                },
                "dependsOn": [
                    "cmake" // 在task `cmake` 后执行该task
                ]
            }
        ],
        "inputs": [
            {
                "id": "CMAKE_BUILD_TYPE",
                "type": "pickString",
                "description": "What CMAKE_BUILD_TYPE do you want to create?",
                "options": [
                    "Debug",
                    "Release",
                    "RelWithDebInfo",
                    "MinSizeRel",
                ],
                "default": "Debug"
            },
            {
                "id": "PLATFORM",
                "type": "pickString",
                "description": "What PLATFORM do you want to create?",
                "options": [
                    "x86",
                    "amd64",
                    "arm",
                    "x86_arm",
                    "x86_amd64",
                    "amd64_x86",
                    "amd64_arm",
                ],
                "default": "amd64"
            },
            {
                "id": "vcvars_ver",
                "type": "pickString",
                "description": "What vcvars_ver do you want to create?",
                "options": [
                    "14.2", // 2019
                    "14.1", // 2017
                    "14.0", // 2015
                ],
                "default": "14.2"
            }
        ]
    }
    

    launch.json 这是VSCode运行调试的配置文件。全平台统一的调试体验就靠它了。依赖于VSCode的C/C++扩展。这里需要告诉VSCode你的C/C++程序在哪,以及运行参数工作目录等,用哪个调试器调试

    {
        // 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": "Launch Debug", //名称
                "type": "cppdbg", //调试类型,除使用msvc进行调试外,均为该类型
                "request": "launch",
                "program": "${workspaceFolder}/build/${workspaceFolderBasename}", //指定C/C++程序位置
                "args": [], //指定运行参数
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}", //指定工作目录
                "preLaunchTask": "build", //在调试前会先调用build_debug这个task编译构建程序
                "environment": [],
                "externalConsole": false,
                "osx": { //macOS的特定配置
                    // "miDebuggerPath": "/Applications/Xcode.app/Contents/ Developer/usr/bin/lldb-mi", //修改使用的lldb-mi,一般不需要修改
                    "MIMode": "lldb" //指定使用lldb进行调试
                },
                "linux": { //linux的特定配置
                    "MIMode": "gdb", //指定使用gdb调试
                    "setupCommands": [
                        {
                            "description": "Enable pretty-printing for gdb",
                            "text": "-enable-pretty-printing",
                            "ignoreFailures": true
                        }
                    ]
                },
                "windows": { //windows的特定配置
                    "type": "cppvsdbg", //指定使用msvc进行调试
                    "program": "${workspaceFolder}/build/${workspaceFolderBasename}.exe", //指定C/C++程序位置
                }
            }
        ]
    }
    
  • 加入断点,左键单击即可,右键可以设置条件断点等。

标签:cmake,VSCode,C++,windows,build,CMake,options,调试,BUILD
From: https://www.cnblogs.com/mxnote/p/16782676.html

相关文章

  • VS2019 使用 C/C++ 动态链接库 并 进行调用
     vs2019生成dll并调用的实现示例:​​https://www.jb51.net/article/179759.htm​​ 1.VS 中生成动态链接库的三种方式(导出函数) 开发环境:VS2019 创建动态链接库项目新......
  • [持续更新]C++从入门到精通
    C++编译器下载https://wwc.lanzoul.com/iRLXO0dnayde密码:33kg1.C++关键字关键词有哪些?在C++98/03关键词总计63个,分别是下面这些:asmdoifreturntypedefautodo......
  • C++ AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用
    从AFX_MANAGE_STATE(AfxGetStaticModuleState())说起 AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用:用于模块切换时的状态保护,1.AfxGetStaticModuleState()指向当前......
  • C++继承模型漫谈
    1、创建子类对象时,会优先创建父类部分,再创建子类部分,也就是子类对象是包含了两部分内容,(父类部分+子类部分)(图1)classTypeA{public:inta=10;voidv(){......
  • <三>从编译器角度理解C++代码的编译和链接原理
    代码点击查看代码**sum.cpp**intgdata=10;intsum(inta,intb){returna+b;}**main.cpp**externintgdata;intsum(int,int);intdata=20;intmain(......
  • CMakeLists.txt中打印所有变量
    一、打印可见变量及其值get_cmake_property(_variableNamesVARIABLES)foreach(_variableName${_variableNames})message(STATUS"${_variableName}=${${_variabl......
  • C++中class关键字
    在C++语言中​​class​​​是定义类的关键字,C++中也可以使用struct定义类。两者区别是,用​​class​​​定义的类,如果​​数据成员​​​或成员函数没有说明则默认为priva......
  • windows C++ 异常调用栈简析
    楔子以win11+vs2022运行VC++编译观察的结果。如果安装了VisualStudio2022,比如安装在D盘,则路径:D:\VisualStudio\IDE\VC\Tools\MSVC\14.33.31629下面包含了vcrun......
  • 在 macOS 中用 gcc 替换 clang 作为 VSCode 编译器
    众所周知,macOS下的默认C/C++编译器是clang/clang++而非gcc/g++,尽管在大部分情况下或许难以察觉其中的区别,但偶尔我们会需要用到gcc中的一些函数等等,因此改用VSCod......
  • C++STL
    STL1.说说STL的基本组成部分STL由6部分组成:容器(Container)、算法(Algorithm)、迭代器(Iterator)、仿函数(Functionobject)、适配器(Adaptor)、空间配制器(Allocator)。容器......