Visual Studio 2022 CMake+MinGW+GDB 调试目标程序

前段时间笔者在使用MinGW编译了QtCreator后,想要进行调试。最开始使用VSCode进行调试,可是可以调试,但是发现调试过程中反应比较慢,毕竟QtCreator整个源代码工程还是非常大的,VSCode是由JS语言编写,执行效率肯定比不上C/C++。于是想使用Visual Studio 2022进行调试,但是Visual Studio 2022下使用CMake+MinGW+GDB的配置比VSCode复杂一些,参见笔者前面的博文Visual Studio 2022使用MinGW来编译调试C/C++程序,该中是使用的非常简单的示例项目,即生成目标在根CMakeList.txt中,而QtCreator是子目录中的目标,搞了很久愣是没配置出来,网上各种查资料,各种尝试,还没是搞定。于是在Github上发Issue进行询问,Visual Studio 2022 CMake+MinGW+GDB cannot debug target,到目前为止还没任何回复,可能是由于当初标签打错了(搞成C++23),导致暂时没关注过来。

今天笔者又想调试一下QtCreator了,还是想使用Visual Studio 2022 CMake+MinGW+GDB的方式,于是又在网上各种查资料,各种尝试,终于成功了。即使深夜了也还是决定发文出来分享给大家,独乐乐不如众乐乐。

要想在Visual Studio 2022中使用CMake+MinGW+GDB的方式调试程序,需要配置launch.vs.json,具体的配置项可以参考官方文档launch.vs.json 架构参考 (C++)配置 CMake 调试会话

最主要的属性配置项为:

属性说明
name指定“启动项”下拉列表中条目的名称。
projectTarget指定生成project 时调用的可选目标。 目标必须与“启动项”下拉列表中的名称匹配。
project指定项目文件的相对路径。 通常,调试CMake项目时不需要更改此值。
program要执行的调试命令。 默认为 “${debugInfo.fullTargetPath}”。
type配置类型,可以是“default”,“cppdbg”和“cppgdb”
MIMode指示 MIDebugEngine 将连接到的已启用 MI 的控制台调试程序的类型。 允许的值为 “gdb”、“lldb”。
miDebuggerPath启用 MI 的调试程序(例如 gdb)的路径。 如果未指定,它将首先搜索调试程序的路径。

后面三项都比较容易配置,根据说明,最容易犯错的是前面四项,特别是前面两项,因为根据说明比较搅。projectTarget必须与name匹配,这个匹配是指完全配置成一样吗?根据网上大多数资料,都是配置成一样的,因为都是在根CMakeLists.txt中的目标;project项目文件相对路径,CMake项目不需要更改,即原来是CMakeLists.txt,不管它;program是最容易被忽略的,因为根据说明默认为 “${debugInfo.fullTargetPath}”,这个宏由于不方便看到值,所以很容易以为会自动根据前面的配置匹配到目标,其实不然。

根据笔者尝试成功后发现,nameprojectTarget可以配置成不同的字符串,name用于显示在“启动项”下拉列表中,而projectTarget一定是与CMake中的目标名字必须完全匹配,program需要配置成可执行文件的绝对路径或者相对于cwd配置中的路径

本文链接:https://blog.csdn.net/witton/article/details/130674898

下面是成功调试的画面:

在这里插入图片描述

下面给出完整配置:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "cppdbg",
      "name": "Qt",
      "project": "CMakeLists.txt",
      "projectTarget": "qtcreator",
      "cwd": "${workspaceRoot}",
      "program": "out/build/Mingw64-Debug/bin/qtcreator.exe",
      "MIMode": "gdb",
      "miDebuggerPath": "gdb.exe",
      "externalConsole": true
    }
  ]
}

可以看到nameprojectTarget配置成了不同的字符串,program一定要配置成绝对路径或者相对于cwd的路径,projectTarget配置成与CMake目标完全一致的字符串,注意没有.exe后缀,笔者之前尝试无数次失败的原因就是这个:

在这里插入图片描述

因为CMakeLists.txt中的目标就没有.exe后缀。

笔者能够成功是受益于官方的一博文Debugging Linux CMake Projects with gdbserver,它配置的nameprojectTarget不同,还配置了program为绝经路径。该博文的介绍如何使用Visual Studio+CMake+GDB的方式远程调试Linux程序,后面得空尝试一下。

深夜码字不易,如果对你有帮助,请点赞收藏。

### 如何在 Visual Studio 2022 中配置和使用 GDB 调试器 #### 安装 MinGWGDB 为了能够在 Visual Studio 2022 中使用 GDB,首先需要安装 MinGW (Minimalist GNU for Windows),它包含了 GCC 编译器以及 GDB 调试器。可以通过访问 MinGW 的官方网站下载并安装最新版本的软件包[^1]。 #### 设置环境变量 完成 MinGW 的安装之后,需将 `bin` 文件夹路径添加至系统的 PATH 环境变量中,以便命令行能够识别 gcc 及 gdb 命令。这一步骤对于确保 Visual Studio 正确调用这些工具至关重要。 #### 创建新的 CMake 项目支持 GDB 当创建一个新的基于 CMake 的 C/C++ 工程时,在向导中的 "Additional Tools" 页面勾选 “MinGW Makefiles” 来指定构建系统为 MinGW 版本的 make 工具链。这样做的目的是让 IDE 明白应该采用哪种方式去处理项目的编译与链接过程[^2]。 #### 配置调试设置 进入要使用的具体项目,通过右键点击解决方案资源管理器里的项目名称 -> 属性菜单项找到对应的属性页签;切换到左侧列表下的 Debugging 分类下拉框内选择 External Program 并指向本地已安装好的 gdb.exe 所处位置(通常位于 MinGW 的 bin 目录),同时调整 Arguments 参数以适应实际需求,比如 `-ex run --args ${Executable}` 表达式用于自动执行被测程序。 ```cpp // 示例:简单的 Hello World 应用程序供测试之用 #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } ``` #### 开始调试会话 一切准备就绪后,只需按 F5 键即可启动带有断点功能在内的完整调试体验。此时 Visual Studio 将加载由外部定义过的 GDB 实例来进行交互式的源码级跟踪分析工作流。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值