文章目录
概述
使用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调试器安装和使用总结》中进行进一步的讨论。