使用MSVC2017编译器在QtCreator中进行调试

25

我已经安装了Qt,但在尝试从QtCreator中调试C++代码时遇到了错误。我在Windows上使用Visual Studio 2017,似乎QtCreator需要的调试器(cdb.exe)没有安装。当使用MSVC2017编译器时,我该如何配置调试以使其适用于64位代码?

1个回答

51
我在这里讨论的是如何使QtCreator与Visual Studio 2017(MSVC2017)编译器配合使用,包括调试!默认安装MSVC2017和Qt 5.10将允许您编译和运行代码,但默认情况下不会获得调试支持。我将展示获取所有必要安装步骤(包括调试支持)的方法,适用于以下参考系统:
参考系统: - Windows 7 SP1 x64(在Win10上完全相同) - Visual Studio 2017(版本15.5.1) - Qt 5.10.0 - Qt Creator 4.5.0(MSVC 2015,64位) - 用于Windows的调试工具(CDB.exe),它不随Visual Studio 2017一起提供 - 通过Windows 10 SDK - 面向Windows桌面64位应用程序
我已经在Windows 10和Windows 7(x64)上测试了这些步骤,它们似乎可以正常工作。请注意,Qt安装程序捆绑的QtCreator版本是32位版本,如果您尝试使用MSVC进行调试,则无法正常工作。虽然有文档记录这一点,但没有逐步说明(参见QtCreator Windows DebuggingQtCreator Debugger Engines),而且并非所有内容都在一个地方,因此我将在此提供简单的说明,以便为上述参考系统使其运行。

先决条件

  • Windows 7 x64或Windows 10
  • Visual Studio 2017(使用版本15.5.1进行测试)

假设您已经安装了Win7 / Win10和MSVC2017,让我们开始吧!

下载Qt

  • Qt Official Release Archive下载文件qt-opensource-windows-x86-5.10.0.exe
  • 选择“msvc2017 64-bit”选项进行安装。
    • 对于此处描述的配置,其他所有复选框都不必要

Qt 5.10 Setup

安装适用于 Windows 10 的 Windows SDK - https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive

Windows 10 SDK

  • 选择"Windows调试工具",并取消其他所有选项

Windows 10 SDK feature selection

  • 网络安装程序将下载所选组件并创建一个名为“Windows Kits”的文件夹。
  • 安装这两个文件(x86版本是可选的):

    • Windows Kits\10\WindowsSDK\Installers\X64 Debuggers And Tools-x64_en-us.msi
    • Windows Kits\10\WindowsSDK\Installers\X86 Debuggers And Tools-x86_en-us.msi

Win SDK debugger installers

安装64位独立版QtCreator安装程序

注意:如果您在安装Windows调试工具之后安装QtCreator,则QtCreator将自动检测调试器的位置,在创建套件时为您节省麻烦。如果您已经安装了QtCreator,请不用担心,下面将显示如何配置QtCreator中的套件。

  • 下载“Windows 64位Qt Creator 4.5.0”

enter image description here

  • 这个版本似乎有选择"CDB调试器支持"的选项(在安装了捆绑了Qt Creator的完整Qt软件包中找不到)

Qt Creator 4.5.0 (64-bit) setup

在QtCreator中配置工具包

在QtCreator的术语中,"Kit"是调试器、编译器、Qt版本等组合。(在这个意义上,当我们安装调试器时,单词"Kit"并不意味着与"Windows Kits"相同;这是一个不幸的名称冲突。)通过选择"工具" -> "选项" -> "构建和运行"来设置"QtCreator Kit"。我喜欢从最右边的选项卡开始,并向左工作,最后结束于"Kits"。原因是所有下面的标签(1,2,3)都需要进行配置才能形成完整的Kit。

QtCreator kit configuration order

在QtCreator中配置调试器

  • 设置路径为C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe,并将其命名为"Window Kit 10 cdb x64"。

Debugger Tab in QtCreator

  • 设置编译器。确保“Microsoft Visual C++ Compiler 15.0 (amd64)”在列表中。注意,如果您将东西安装到默认路径,则QtCreator将自动检测这些位置。如果未列出编译器的路径,请添加该路径。

  • 请注意,对于Visual Studio 2017 x64位,您需要“amd64”版本,即64位编译器。如果您想知道为什么有这么多编译器列出来--它们是“交叉编译器”。这意味着它们针对不同的架构,因此例如,“x86_amd64”是一个32位进程,创建一个64位应用程序;如果您在32位计算机上开发64位代码(因此术语是交叉编译),则会使用此版本。由于本教程假定您正在运行64位操作系统,请使用amd64版本。(“x86_amd64”交叉编译器也会生成64位代码。)当我第一次看到QtCreator中巨大的编译器选择列表时,我不知道该选哪个。现在你也知道了!请参见编译x64代码时,“x86_amd64”和“amd64”之间有什么区别?

cpp-64-bit-compiler

现在配置套件

  1. 点击添加
  2. 名称 - 给出套件的名称;这将是编译应用程序时使用的配置。
  3. 编译器 - 选择"C和C++的Microsoft Visual C++ Compiler 15.0 (amd64)"。
  4. 调试器 - 选择我们在"调试器"选项卡上配置的"Windows Kit 10 cdb x64"。
  5. Qt版本 - 选择"Qt 5.10.0 (msvc2017_64)"。与您将链接的Qt库具有相同的位数进行编译非常重要。
  6. 点击应用

Kit Setup in Qt Creator

验证调试工作

让我们写一个64位程序,并对其进行调试。一个好的测试是分配大量内存(典型的32位Windows进程仅限于2GB,请参见32位进程在64位操作系统上可以访问多少内存?)。分配32GB RAM应该是一个肯定的指标,表明我们确实正在编译64位应用程序。这是QtCreator调试64位Windows测试程序的屏幕截图:

Debugging 64-bit code in Qt Creator

请注意,我正在使用MSVC2017 64位编译器和上述提到的CDB.exe调试器。

#include <QCoreApplication>
#include <cassert>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int intSize = sizeof(int);
    assert(intSize == 4);

    int intPtrSize = sizeof(int*);
    assert(intPtrSize == 8);

    constexpr size_t giga = 1000 * 1000 * 1000;

    size_t _32gigs = 32 * giga / intSize;
    int* gigaChunk = new int[_32gigs];
    assert(gigaChunk != nullptr);

    return a.exec();
}

@Matthew 我使用在线安装程序安装了Qt Creator 4.7.0,并且调试可以正常工作。看来不需要额外的离线安装程序。 - uniquenamehere
@iQt 你在使用哪个编译器?MinGW吗?以下说明是为那些想使用Visual Studio 2017自带编译器的人准备的,以使调试工具可用。 - Matthew Kraus
3
非常好的回答。我想补充一点,如果你使用Visual Studio Installer安装程序,你将有一个选项可以安装最新的Windows SDK。然而,似乎调试工具并没有默认安装在SDK中 - 我不得不去“控制面板” -> “程序和功能”,然后更改SDK的安装选项以包括调试工具。 - Carlton
4
在安装 Windows SDK 以进行调试之前,我已经安装了 Qt Creator。因此,在安装文件:Windows Kits\10\WindowsSDK\Installers\X64 Debuggers And Tools-x64_en-us.msi 后,我只需关闭并重新打开 Qt Creator,它就会发现调试器已经安装好了。请注意保持原文意思,同时使语言更加通俗易懂。 - Patapoom
感谢分享这些说明。有一点需要注意:在__Qt Creator 4.14.1__中,__Qt Creator 中配置套件的设置__已经从工具 -> 选项 -> 构建和运行移动到了工具 -> 选项 -> 套件中。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接