VSCode + CMake + MinGW 在 Windows 下的简易调试指南

news/2025/3/16 6:10:22/文章来源:https://www.cnblogs.com/Keaton/p/18774443

VSCode + CMake + MinGW 在 Windows 下的简易调试指南

目录
  • VSCode + CMake + MinGW 在 Windows 下的简易调试指南
    • 准备工作
      • 下载VSCode
      • 下载CMake
      • 下载MinGW
    • 待编译源码
    • VSCode调试
      • task.json 配置
      • launch.json 配置
      • 开始调试

鉴于网络上关于VSCode的调试的教程不多,并且掺杂着大量的随机爬取内容、过时教程等无用信息。现于此记录自己编译使用 VSCode的 过程,用于自身备忘,及经验分享。

准备工作

下载VSCode

参考链接: https://code.visualstudio.com/

下载CMake

参考链接: https://cmake.org/download/

直接下载自己电脑对应版本的Binary distributions(二进制分发包,即可执行文件),比如作者使用的是 Windows X64 的系统,所以下载的是 Windows X64 的包。

其中的.msi文件是镜像安装文件,类似于安装包。而.zip文件就是包含可执行文件的压缩包。

安装后目录如下:

进入 ./bin 文件夹中,如下图,cmake.exe 是命令行工具,cmake-gui.exe 是界面工具。若使用压缩包的朋友,记得将该文件夹 (./bin) 加入系统环境变量,便于以后的命令行编译。也可以把 cmake-gui.exe 用快捷方式固定到桌面便于后续使用。

下载MinGW

参考链接: https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/

不需要最新版本MinGW的朋友看这里: 可以下载官方链接这里的包,解压缩后就是完整的8.1.0版本的 MinGW。之后同样将 ./bin 文件夹加入系统环境变量后即可完成此步。

需要新版本的朋友可以在此处 github 仓库内下载最新的 MinGW64 二进制分发包, 此处建议下载命名如 x86_64-14.2.0-release-posix-seh-ucrt-rt_v12-rev1.7z 的包。

待编译源码

-RootDir|- CMakeLists.txt|- src|- main.cpp|- hello_world.h|- hello_world.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)project(Test)# 加入 -g 编译标识, 生成gdb使用的调试信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")add_library(HelloWorld src/hello_world.h src/hello_world.cpp)add_executable(Main src/main.cpp)target_link_libraries(Main HelloWorld)

main.cpp

#include "hello_world.h"int main() {test::PrintHelloWorld();return 0;
}

hello_world.h

// Copyright (c) 2025 Keaton
#ifndef SRC_HELLO_WORLD_H_
#define SRC_HELLO_WORLD_H_namespace test {bool PrintHelloWorld();
}  // namespace test#endif  // SRC_HELLO_WORLD_H_

hello_world.cpp

#include "hello_world.h"#include <iostream>namespace test {
bool PrintHelloWorld() {std::cout << "Hello World." << std::endl;return true;
}
}  // namespace test

VSCode调试

打开 VSCode, 将代码根目录文件夹加入工作区,并在该目录下新建 build 文件夹。最终文件结构如下:

task.json 配置

ctrl + shift + P 打开 VSCode 命令行,输入 Tasks: Configure Task,回车执行。 然后任意选择一个模板,回车执行。这时会在文件夹中生成 .vscode 文件夹, 及文件夹内的 task.json 文件。

再配置 task.json 文件如下:

launch.json 配置

ctrl + shift + P 打开 VSCode 命令行,输入 Debug: Add Configuration, 回车执行。 然后选择 C++: GDB/LLDB 用于调试,回车执行。

这时会在 .vscode 文件夹中生成 launch.json 文件。

此时重复执行 Debug: Add Configuration 命令,选择 C/C++: 启动(gdb) 将在该文件中增加一套执行模板。

将 launch.json 配置如下:

开始调试

在需要加入断点的代码行点击 F9 或者左键点击该行行号左侧增加断点。

点击 F5 运行程序。

好了,现在大家可以开始大力调试代码了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899570.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指令集并行与开发进阶算法

进阶算法 基础算法无法解决中断恢复的问题,即假如有两个写寄存器的操作,指令1,指令2,可能乱序执行时指令2的结果已经将写回了寄存器,但是指令1还未执行,此时发生中断后,从指令1重新开始执行,就会重新进行两次写入,将会发生错误。 只要保证后面指令修改机器状态时, 前面…

指令集并行与开发Tomasulo算法

指令集并行与开发Tomasulo算法 1. 概念 Tomasulo 方法是一种用于在超标量处理器中执行指令并处理数据相关(数据相关性)的方法。它主要通过对指令进行乱序执行和动态调度来提高指令级并行性。 可以通过寄存器重命名消除 WAR 和 WAW 相关(通过保留站号间接实现重命名) 也可以…

芯片存储器层次结构概述

存储器层次结构概述 1. Cache的作用 Cache结构与作用,如图2-5所示。图2-5 Cache结构与作用 介绍一下Cache具有特征。Cache没有程序上的意义,只是为了降低访存延迟;处理器访问Cache和访问存储器使用相同的地址。 Tag存储cache块在主存中的首地址(cache每个字节都给一个地址太…

推荐1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》书,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

MYSQL-DDL操作

点击查看代码 ```plaintext create table tb(id int comment ID,username varchar(20) comment 用户名,name varchar(10) comment 姓名,age int comment 年龄,gender char(1) comment 性别 )comment user测试表</details> ![](https://img2024.cnblogs.com/blog/3619156…

JetBrains IDEA破解后一直跳出激活弹窗

正文 一直跳弹窗是因为选了区域中国,你可以断网,然后到打开设置,搜索区域,选择亚洲。保险起见,保存后先关闭idea,再连接网络,启动IDEA。

三分钟教学:手把手教你实现Arduino发布第三方库

Arduino 发布第三方库的流程包括:构建库的基本框架后将其打包并上传至 GitHub,在 GitHub 上创建 Tag 和 Release 后,提交到 Arduino 库管理器,最后在Arduino IDE进行验证。三分钟教学:手把手教你实现Arduino发布第三方库原文链接: 手把手教你实现Arduino发布第三方库 摘要…

2025-315晚会总结

🔖简介 2025年315晚会曝光了多个行业的消费乱象和违法侵权行为。 主题:“共铸诚信 提振消费”,聚焦食品安全、公共安全、金融安全、数字经济等领域。 核心诉求:打击消费陷阱,推动构建公平、诚信的消费环境。 📢曝光现象 🔒数据安全与隐私侵权非法窃取个人信息涉事企业…

再破难关(BFS)

问题 F: 再破难关 题目描述 OIBH组织派出的黄金十二人+青铜五小强还没有到, 他们只能指望原先的机关能够阻拦住柯南的脚步。柯南打开大门之后发现里面还有一个门, 门上还有一个神奇的锁(-,-) 这是一个4*4的锁, 上面有8个凸起的格子和8个被按下的格子,当且仅当两个格子有公共边…

LLM大模型:OpenManus原理

继deepseek之后,武汉一个开发monica的团队又开发了manus,号称是全球第一个通用的agent!各路自媒体企图复刻下一个deepseek,疯狂报道!然而manus发布后不久,metaGPT团队5个工程师号称耗时3小时就搞定了一个demo版本的manus,取名openManus,才几天时间就收获了34.4K的start…

Day14_TCP三次握手

每日一题 TCP三次握手详解 三次握手(Three-Way Handshake) 是TCP协议建立可靠连接的核心过程,确保通信双方能够正常收发数据并同步初始序列号。以下是详细步骤和原理:1. 第一次握手:SYN(客户端 → 服务器)动作:客户端发送一个TCP报文,设置SYN=1(同步标志位),并生成…

Paimon merge into 实现原理

语法 MERGE INTO target USING source ON source.a = target.a WHEN MATCHED THEN UPDATE SET a = source.a, b = source.b, c = source.c WHEN NOT MATCHED THEN INSERT (a, b, c) values (a, b, c)merge into 实际上是一个语法糖, 相对应的语义也可以通过其他的 sql…