Loading

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

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

鉴于网络上关于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 文件如下:

{
	"version": "2.0.0",
	"options": {
		"cwd": "${workspaceFolder}/build" // 命令工作目录
        // ${workspaceFolder} 为当前链接文件夹的工作区根目录
        // 此处即为 D://02
	},
	"tasks": [
		{
			"label": "CMake",  // cmake 构建
			"type": "shell",
			"command": "cmake",
			"args": [
				"-S",
				"${workspaceFolder}",  // 源码目录 ( CMakeLists.txt 所在目录)
				"-B",
				"${workspaceFolder}/build",  // 工程构建目录
				"-G",
				"Unix Makefiles"  // 指明使用 Makefiles 编译
			]
		},
		{
			"label": "Make",  // make 编译
			"type": "shell",
			"command": "make",
			"args": []
		},
		{
			"label": "Build",  // 组合上面两个模块为一个过程
			"dependsOn":[
				"CMake",
				"Make"
			]
		}
	]
}

launch.json 配置

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

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

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

将 launch.json 配置如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Test",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/Main.exe",  // 待调试的程序目录
            "args": [],  // 程序输入参数
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\Workspace\\MinGW\\mingw64\\bin/gdb.exe",  // gdb.exe 目录
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build"  // 启动前,执行 task.json 中的 Build 流程
        }
    ]
}

开始调试

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

点击 F5 运行程序。

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

posted @ 2025-03-16 06:06  基顿  阅读(1189)  评论(0)    收藏  举报