IDE/集成开发环境 Qt Creator+MSVC编译器+CDB调试器/WinSDK

文章目录

概述

使用Qt实现UI用户界面,VS开发高性能的底层业务并封装成独立LIB库,是很实际工程的常态。而MSVC生成的库在 MinGW 环境下直接使用是非常不友好、甚至通常不可行的。你又很喜欢使用Qt Creator编辑器,此时就需要将其配置为使用MSVC编译器+CDB调试器套件。本文构建的开发环境使用QtCreator 4.11.2 编辑器,VS2015/VS2017-MSVC编译器,WinSDK10-CDB 调试器。

@Brief

在某些对性能、资源占用或实时性要求极高的 Windows 桌面工程中(如工业控制、高频通信、低延迟设备驱动交互),开发者更趋向于仅用 Qt 构建 UI 层(Widget或QML),而将底层通信、数据处理等核心逻辑用原生 Win32 SDK、或 C++ 标准库 等来实现,以避免 Qt 的抽象开销、运行时依赖或潜在的不确定性。

如果你的桌面程序需要调用到一些开发自 Visual Studio IDE 的DLL动态库,你不太可能使用 QtCreator+MingW开发环境,那很不友好。 也不建议在QtCreator中用CDB调试非UI部分的程序,尤其是库中使用WinSDK接口函数的时候,这也很不友好。

如果你的主要目的不是开发UI程序或组件,我的最终建议是不要去使用QtCteator,而是直接使用VS开发环境。如果要开发的UI不多,你可以在VS中嵌入Qt插件去完成UI部分的开发。使用Visual Studio,可以利用其强大的内置调试器,这是比CDB和GDB好用很多的家伙。MSVC在VS被调用,也可能比在QtCteator下调用有更好的编译效果,哈哈,这句话是我瞎想的。

@HISTORY:

这是大约5年前创建的文章,当时给自己预设了一堆问题,然后就卡主了,后来这些问题大多都解决了,这篇文章就被遗忘了。现在是26年1月,要在一台新PC上构建集成开发环境。待调试工程是基于QtCreator+MSVC的,参考了此文章。顺便删删减减发布。

Qt安装目录

在安装QtCreator时,会出现以下选择界面。下图配置并不合理,配成这样,只是为了清晰辨别安装目录结构。

@NOTE 大家根据自己的实际需求选择要安装的组件。左边选的是框架组件,右边是编译套件。

框架目录

在主安装目录下,以版本号命名的目录就是框架目录。如我们安装Qt软件时,勾选了mingw32、mingw64,msvc2015_64、源码SRC,则安装完成后,宽假目录将是以下样子,

这些文件夹下,存储的是对应编译器编译出来的Qt框架动态库或可执行文件,像qmake.exe、assistant.exe、moc.exe、Qt5Cored.dll等依赖库。调试器、编译器等工具不在此处,它们存在与Tools工具目录。

特别要注意的是,

qmake属于Qt框架,而不是编译套件。使用不同编译器时,qmake要从不同编译框架目录下选取。

QtCreator CDB 桥接

说来奇怪,Qt 5.12 版本我安装过N多次了,以前竟然没有留意到过有Qt Creator 4.11.2 CDB Debugger Support 这个东西。

我原本期望着,勾选了上图绿色框中的Qt Creator 4.11.2 CDB Debugger Support 选项后,能像mingw那样,在安装目录Tools文件夹下能被创建出来一个类似mingw730_64名称的QtCreator CDB目录来,可惜没有,只能搜到一个 cdbbridge.py 脚本,

实际上,Qt Creator 4.11.2 CDB Debugger Support 是 Qt Creator 集成 Windows 平台原生调试器 CDB 的核心组件。目的是让 Qt Creator 能像 Visual Studio 一样,调试用 MSVC(cl.exe)编译的 .exe / .dll 程序。Qt Creator 默认使用 GDB 或 LLDB作为调试器。但 GDB 无法调试 MSVC 编译的程序,要调试 MSVC 版本的 Qt 程序(如 msvc2017_64),必须使用微软系调试器。

这是一个 Python 脚本桥接器,用于:启动 cdb.exe;通过 调试事件(Debug Events)和命令通道 与 CDB 交互;将 CDB 的原始输出 解析为 Qt Creator 调试器插件能理解的结构化数据;实现断点、单步、变量查看、调用栈等高级功能。相当于:

Qt Creator(前端) ↔ cdbbridge.py(中间层) ↔ cdb.exe(后端)

工具/编译套件

图左配置对应的工具目录,如图右,

以mingw730_64为例,看看其目录下有啥,

与编译相关的预处理器、编译器、汇编器、连接器、调试器等都相关套件对应的bin目录下。

要注意到这里并没有msvc的编译套件,没有编译器也没有调试器。

其实也没有什么稀奇的。在安装设置时,可选择msvc框架组件,但是没有msvc工具选项,也即没有msvc编译套件选项。

MingW 编译套件

使用MingW编译和调试时,我们要从上图目录(安装Qt软件时,只要勾选了mingw32和mingw64就会从安装包解压出如上工具包,其中包含gcc、g++、gdb等)中选择相应的编译器和调试器。注意qmake不再这里哈。

但是这个Tools下并不存在vs的相关工具,即使你在安装Qt时已经勾选了 MSVC 2015 64-bit 组件。

选择MSVC套件

我们必须要从VS的安装目录下对应选取对应的MSVC套件。如果你安装过VS,存在于环境变量中。通常QtCreator会自动检索到它们。

我们打开QtCreator的Kits设置界面,选中Desktop 5.12.9 MSVC2015 64bit 套件,显示如下,由于早就安装过VS2015,QtCreator自动检索到了相应的编译器(何时其路径确为VS安装路径),但是Debugger并没有。

多说点。打开Kit编译器选项卡看看,

上述MSVC编译器的安装目录都指向VS的安装目录。上图是Microsoft Visual C++ Compiler 14.0(即 MSVC 2015)的不同 目标架构(Target Architecture)和平台组合。它们代表了同一个编译器在不同硬件架构下的变体,用于生成针对特定 CPU 架构的可执行文件。

这么多组合的原因是,编译器所在的宿主平台,和结果程序运行的目标平台可能是不一样的,需要做兼容。最常用的是:

amd64_x86 #在你的 64 位电脑上编译 32 位程序(兼容旧设备);amd64 #在你的 64 位电脑上编译 64 位程序(性能最优)。

这里的 amd 并不是特指 AMD 公司,而是 x86-64 指令集架构的历史命名遗留。64 位 x86 架构的通用名称,源于 AMD 首先设计了 x86 的 64 位扩展,后来被 Intel 采纳并成为行业标准。AMD 公司 于 2003 年 发布了 AMD64 架构(也称 x86-64),它:完全兼容 32 位 x86 指令

同时支持 64 位寻址和计算。Intel 最初拒绝,但因市场压力,最终在 2004 年 推出兼容 AMD64 的处理器,并称为 Intel 64 或 EM64T。

事实上,amd64、x64、x86_64,是等价的。amd64,强调AMD首创,x64是微软的营销名称,x86_64是Linux社区使用的中立名称。所有现代 64 位 Intel 和 AMD 处理器都支持 同一套指令集,统称 x86-64。amd64 只是表示"64 位 x86 平台",与 CPU 是 Intel 还是 AMD 无关。

非要独立安装CDB?

VS安装过程中,顺带安装的WinSDK版本是不带CDB程序的。

了解CDB调试器

CDB 是 Microsoft Console Debugger 的缩写,翻译为「控制台调试器」,它是微软 Windows 调试工具集(Windows Debugging Tools) 中的核心组件之一(同家族还有 WinDbg、NTSD 等),是一款 ** 命令行界面(CLI)** 的底层调试器,专门用于调试 Windows 平台上的原生程序。它和 WinDbg 共享同一套调试引擎(dbgeng.dll),本质上是「WinDbg 的命令行版本」------ WinDbg 是可视化界面封装,CDB 是纯命令行交互,支持的调试命令完全一致。

它不是 Visual Studio 中的可视化调试器(VS 调试器更偏向开发阶段的快速调试),而是一款专业、底层、命令行驱动的调试工具。VS自己用的调试器是vsjitdebugger.exe,可以叫它windows本地调试器,或Visual Studio实时调试器,它在操作系统目录C:\Windows\System32 和 C:\Windows\SysWOW64 下均存在。

而CDB调试器并不属于 Microsoft Visual Studio 软件,它是Windows工具。我们可以跳到微软的官网上去简单了解下Windows 调试工具。WinDbg、KD、CDB、NTSD等调试工具,作为 Windows SDK 的一部分,可以单独安装。关于CDB调试器网络搜索结果中,很大部分条目都与Qt有关,也说明了他们之间的结合是很常见的。

Windows SDK 和Windows版本并没有直接的关系 ,但是有一定的限制要求,比如太低的SDK版本可能不能在新版本的Windows平台上使用,我们可以查看SDK的详细说明,这里不再做延伸。Here,在进入WinSDK下载页面,我选择了Win10版本(17763.592)相同版本的 Windows 10 SDK 版本 1809 (10.0.17763.132)

补充:

查看Win10-OS版本的方法有很多,我们只介绍一种最直接的。从Windows设置 - 系统 - 关于 - Windows规格 - 操作系统版本。

补充:

Windows SDK 是未开发人员准备的软件开发包,可以让我们方便的开发Windows应用程序,同一台电脑上可以安装很多不同版本的Windows SDK,一般在安装Visual Studio的时候会安装一个版本的Windows SDK,我也可以自己下载其他的版本,同时安装多个版本的Windows SDK,只需要在配置VS的时候选择不同的window SDK版本(项目配置-常规-目标平台版本)即可。

补充:

有人如下说,但是我没遇到过(因为我很少在VS下使用WinSDK),仅记录以供参考。VS2015最高支持14393版本的SDK,之后从15063起就必须要VS2017,很多人出现VS开发环境下找不到rc.ex和cl.exe的问题,这通常就是没有安装SDK或安装了VS不支持的SDK版本引起的。

后记:

在19044.2251操作系统版本上安装 Windows 10 SDK 版本 2004 (10.0.19041.0) ,用以QtCreator + MSVC搭建集成开发环境,使用正常。

VS2015的WinSDK

安装VS集成开发环境时,如VS2015,会默认安装WinSDK的某个对应版本。

已安装VS2015中,未安装独立WinSDK前,

在VS的配置界面中,如上WindowsSDK版本(目标平台版本)选择处只有一个8.1,(我的OS是Win10-17763.592),但是这里只有8.1(即WinSDK8.1),它可能是安装VS2015时附带的SDK ?(其对应目录为C:\Program Files (x86)\Windows Kits\8.1...)

查看了一个从未安装过VS的机器,其系统盘下根本没有C:\Program Files (x86)\Windows Kits 这层目录,由此可以基本断定,WinSDK8.1就是安装VS2015时安装的。但是应该注意到,上述SDK安装目录不带cdb.exe执行文件。

安装Win10 SDK后,上述目录下多出一个名称为10的目录;关于这块的详细描述可以参见本作者关于VS2015集成开发环境的其它文章

VS2017的WinSDK

参考我的,https://editor.csdn.net/md/?articleId=120970461

安装VS2017社区版本,安装很成功,并无任何异常。安装完成后,通过控制面板 - 程序和功能 类表,可看到新增了如下程序和组件:

这里我们重点关注,Windows Software Development Kit - Windows 10.0.17763.132这个组件,它就是我们熟悉的Widows SDK。在安装VS2015及以前的版本时,这个组件是不会被安装的,你需要自己去官网单独下载安装或使用引导程序进行安装。

VS2015默认使用的 "目标平台版本" 是8.1,可在项目属性 - 常规,配置项下进行查看。在VS2017 相应的位置上,该项配置已经更名为 "Windows SDK 版本",更直白了。VS2017 的默认目标平台版本/Windows SDK 版本 是 10.0.17763.0,正是在系统程序列表中随VS2017安装的那一个。开始支持,随VS直接安装一个Windows SDK组件,有啥好处呢?

我们在 程序类表上选中 Windows Software Development Kit - Windows 10.0.17763.132 右键,点击更改,弹出下图,

这与我们之前,独立安装 Windows SDK 其他版本的包时,其界面是一毛一样的。随VS2017安装的Windows SDK并没有安装CDB调试器,我们可以在上述界面的基础上继续操作,然后把CDB工具给安装上。如此操作,比独立去下载其他Windows SDK版本来安装使用,是更合适的,毋庸置疑,原配更好。同一个版本下CDB和调试库、运行库等是更和谐,更不容易出现调试问题的。

下载独立WinSDK

现在是2026年1月,当再打开SDK下载页面时,已经没有那么多Win10的SDK包可以使用了。毕竟Win10已经被官宣不再维护了,估计用不了多久,连下边这两个也没有了。届时,只能从三方或个人网盘中去获得了。

安装WinSDK-CDB

从官网下载 合适的 Windows 10 SDK 版本。这里我们选用的是.iso格式的。

双击下载的 19041.685.201201-2105.vb_release_svc_prod1_WindowsSDK.iso 文件,使用系统 DVD驱动器打开,双击打开其中的安装文件,选择安装路径(默认就好),同意相关协议后, 在弹出的安装列表中仅选择调试工具...

安装成功后,可以在C盘下搜索到4个cdb.exe位置,应该是与编译器类型有关,分别位于arm、arm64、x86、x64目录下,我们需要的应该是C:\Program Files (x86)\Windows Kits\10\Debuggers\x64目录下的这一个。

依据上述过程安装完CDB工具后,已经可以去QtCreator中进行调试器的配置啦,如果对VS或WinSDK还有更多的兴趣,可以看看 << IDE/分析VS2015安装异常及其原因/WinSDK安装>> 文章中的相关描述。参考文章,可以了解WinSDK安装前后的系统环境变量和VS配置中发生的变化,以及安装方法和注意事项。

QtCreator配置CDB

在一个安装或配置良好的系统找那个,则QtCreator的调试器或Kit配置界面应该是能自动检索到CDB调试器的。

但我也遇到过几次没有被识别到时候,这可能与VS和Qt按照顺序、环境变量配置、是否安装在C盘等因素有关。具体原因我并没有再去研究。如果有无法找到的情况,可以去手动添加调试器路径。

上图就是很奇葩,自动识别了X86目录下的调试器,却没有识别到x64下的。手动添加呗。

使用体验

对于QtCreator + MSVC + CDB 组成的开发环境,我的使用体验有点不太好。编译问题还好说,查查改改就解决了。最烦人的是,在环境下单步调试程序时容易崩溃。该问题不止我自己遇到过,很多人都有类似使用体验。至此,也没有找到很好的解决办法,我只能减少单步调试,而是适当增加打印信息,只设置一个断点,然后F5直接运行到待分析的代码行处。

我在后来的实践中意识到,VS+Qt的最佳组合方案应该是, VS为主Qt为辅助,即在VS中安装Qt的插件搭建集成开发环境,而不是在QtCreator中去使用MSVC编译器h和CDB调试器。这种方案下,开发UI,稍微别扭了小丢丢。但是调试体验太爽了。VS自己的调试器和MSVC的契合度应该比对CDB的契合度高,功能也强大,比如进行个内存泄漏分析等。在VS中,只要保证使用纯C和C++的资源来开发,尽量不去使用纯Windows的接口,保证跨平台是没有问题的。

---- 以下内容是随便谈谈,不一定正确,可以忽略。

当我们使用CDB进行调试的时候,总是容易出现这样那样的问题。还有一个可能的原因是,

CDB调试器是随着 Windows 10 SDK 安装的,

Windows 10 SDK 版本奇多,每个版本都有自己的一套 Windows SDK,我们不得不考虑的是,每个安装包的CDB与此包下的SDK是最佳匹配的,而与你VS安装时被安装的那个SDK可能存在不匹配的我问题。因此我的建议是,

如果你单独装了 Windows SDK,并打算使用其中的CDB调试器,那么,请为MSVC编译器指定完全对应的 "目标平台版本",而不是任其使用默认的平台版本。

最后我得出的结论是,

如果你想配合VS2015/VS2017的MSVC编译器来进行CDB调试,而你的系统是Windows10版本,此时,你在选择Windows SDK版本时,不要参考操作系统版本,而是参考VS预设的目标平台版本(VS2015预设的目标平台版本是8.1),来选择合适的Windows SDK版本。也即,你要选择安装 Windows 8.1 SDK, 而不是 Windows 10 SDK

相关问题将在《IDE/Windows SDK /Windows CDB调试器安装和使用总结》中进行进一步的讨论。

相关推荐
zhangfeng11331 天前
2026年国际国外top10 top20流行的ai ide,
ide·人工智能
A.A呐1 天前
【QT第三章】常用控件2
开发语言·qt
CDialog1 天前
vscode编译ci1303sdk的源代码
ide·vscode·编辑器
笨笨马甲1 天前
Qt 实现三维坐标系的方法
开发语言·qt
xiaoshiquan12061 天前
Android Studio里,SDK Manager显示不全问题
android·ide·android studio
谁动了我的代码?1 天前
VNC中使用QT的GDB调试,触发断点时与界面窗口交互导致整个VNC冻结
开发语言·qt·svn
肖恭伟1 天前
QtCreator Linux ubuntu24.04问题集合
linux·windows·qt
vegetablesssss1 天前
QT国际化翻译
qt
困死,根本不会1 天前
Qt Designer 基础操作学习笔记
开发语言·笔记·qt·学习·microsoft
1-1=01 天前
Visual Studio Code 简介
ide·vscode·编辑器