VSCode在Windows中调试C/C++

下载VScode

官方地址:https://code.visualstudio.com/

下载编译器

C/C++的mingw-w64编译器下载地址:
https://sourceforge.net/projects/mingw-w64/files/mingw-w64/
在这里插入图片描述

  • 后缀说明
  1. DWARF:一种带调试信息(DWARF- 2(DW2)EH)的包, 所以比一般的包尺寸大,仅支持32位系统
  2. SJLJ:跨平台,支持32,64位系统,缺点是:运行速度稍慢,GCC不支持
  3. SEH: 调用系统机制处理异常,支持32,64位系统,缺点是:Gcc不支持(即将支持)
  1. x86_64: 简称X64,64位操作系统
  2. i686: 32位操作系统 (i386的子集),差不多奔腾2(1997年5月)之后的CPU都是可以用的
  1. posix: 启用了C++ 11 多线程特性
  2. win32: 未启用 (从时间线上正在尝试也启用部分 Treading)

安装编译器

  • 在合适的位置解压mingw-w64,如在C:/
  • 把解压后的bin目录添加到环境变量中
    在这里插入图片描述
  • 添加到环境变量中在这里插入图片描述
  • 在cmd命令行执行 gcc -v 验证

VScode安装插件

  1. C/C++
  2. Code Runner
  3. Chinese

VScode设置

  • scanf函数读取键盘数据
  1. 文件>首选项>设置>用户设置>扩展>Run Code Configuration
    找到 Run In Terminal 打上勾 这样运行的程序就会运行在vscode的集成控制台上
    在这里插入图片描述
  • 运行和停止
    在这里插入图片描述

调试C/C++

不支持中文路径

  1. 首先选中一个用于存放各种代码的文件夹作为根路径也就是工作区,因为调试只会对根路径下的文件生效
  2. 在vscode中打开这个文件夹(文件>打开文件夹>选中你的文件夹)
  3. 在这个文件夹中新建一个 .vscode 的文件夹,不要忘了开头的 “.” 号(如果已有则不必再额外新建)
  4. 在.vscode文件夹中新建两个配置文件 launch.json 和 tasks.json,这里需要修改一处:launch.json中 “miDebuggerPath” 选项需要设置为你的调试器(gdb.exe)所在位置 (电脑上MinGW-w64的安装位置)
    在这里插入图片描述
  5. 把下面的两个段代码粘贴到对应的文件里
    launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,这里只能为cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${fileDirname}即代码所在目录
            "environment": [],
            "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "MIMode": "gdb",
            "miDebuggerPath": "C:/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
            "preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
        },
    ]
}

tasks.json

{
    "version": "2.0.0",
    "command": "g++",
    "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}.exe"
    ],
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": [
            "relative",
            "${workspaceRoot}"
        ],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    },
    "group": {
        "kind": "build",
        "isDefault": true
    }
}
  1. 打开在当前工作区子目录下的.c/cpp文件就可以添加断点进行调试
  2. 也可以让c/c++程序的调试在vscode的集成控制台上进行,不额外显示黑窗口,类似于code runner的界面效果,只需将launch.json中的 “externalConsole” 项由 true 改为 false
  3. 如果需要有额外的编译指令如-lwsock32,需要调试前在tasks.json的args处添加上对应的指令,或者用 // 注释掉launch.json中的 preLaunchTask:“g++”(启动调试前执行g++编译按tasks指令格式编译) ,然后自己在按ctrl + ~ 打开终端手动编译好后再执行调试

CMake与VScode

vscode+cmake 环境配置

  1. 下载cmake:https://cmake.org/download/
  2. VScode配置
    在这里插入图片描述
    Ctrl+Shift+p:输入C/C++:Edit Configurations(UI)生成配置文件 c_cpp_properties.json
    在这里插入图片描述
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "D:\\mingw64\\bin\\g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64",
            "configurationProvider": "vector-of-bool.cmake-tools"
        }
    ],
    "version": 4
}

Ctrl+Shift+p:输入Open launch.json生成配置文件launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:/MinGw/mingw64/bin/gdb.exe",
            "preLaunchTask": "g++",
            // "preLaunchTask": "compile", // task.json 中的 label
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
    
}

Ctrl+Shift+p:输入Tasks: Configure task生成配置文件 tasks.json,告诉VS Code如何构建(编译)程序。该任务将调用g ++编译器以基于源代码创建可执行文件

{
    "version": "2.0.0",
    "command": "g++",
    "args": ["-g","${file}","-o","${fileBasenameNoExtension}.exe"], // 编译命令参数
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

Ctrl+Shift+p:打开配置文件 settings.json 添加

{
    "C_Cpp.updateChannel": "Insiders",
    "cmake.configureOnOpen": true,
    "explorer.confirmDelete": false,
    "cmake.cmakePath": "D:\\CMake\\bin\\cmake.exe",
}

cmake测试

  1. 创建一个工作区文件夹,如clang-work
    在这里插入图片描述
  2. 在该文件夹下写一个简单的main.c程序作为测试程序,和创建一个CMakeLists.txt文件
    在这里插入图片描述
    在这里插入图片描述
  3. (可选)cmd执行命令cmake -G “MinGW Makefiles” 生成makefile文件
    在这里插入图片描述
  4. 生成一个build目录
    在这里插入图片描述
  5. make一下
    在这里插入图片描述
  6. 生成目标文件

自动生成launch.json和tasks.json方法

  • 使用Native Debug插件

  • 使用C/C++ Compile Run插件

launch.json和tasks.json预定义变量

  • ${workspaceFolder} - 当前工作目录(根目录)
  • ${workspaceFolderBasename} - 当前文件的父目录
  • ${file} - 当前打开的文件名(完整路径)
  • ${relativeFile} - 当前根目录到当前打开文件的相对路径(包括文件名)
  • ${relativeFileDirname} - 当前根目录到当前打开文件的相对路径(不包括文件名)
  • ${fileBasename} - 当前打开的文件名(包括扩展名)
  • ${fileBasenameNoExtension} - 当前打开的文件名(不包括扩展名)
  • ${fileDirname} - 当前打开文件的目录
  • ${fileExtname} - 当前打开文件的扩展名
  • ${cwd} - 启动时task工作的目录
  • ${lineNumber} - 当前激活文件所选行
  • ${selectedText} - 当前激活文件中所选择的文本
  • ${execPath} - vscode执行文件所在的目录
  • ${defaultBuildTask} - 默认编译任务(build task)的名字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值