使用 MSVC2017 编译器在 QtCreator 中调试

Debugging in QtCreator using MSVC2017 compiler

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

我在这里讨论的是让 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 Debugging and QtCreator 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" 选项。
    • 此处描述的配置不需要所有其他复选框

为 Windows 10 安装 Windows SDK - https://developer.microsoft.com/en-us/windows/downloads/sdk-archive

  • select "Debugging Tools for Windows" 并取消选中其他所有内容

  • Web 安装程序将下载 selected 组件并创建一个名为 "Windows Kits."
  • 的文件夹
  • 安装这两个文件(x86版本可选):

    • Windows Kits\WindowsSDK\Installers\X64 调试器和 Tools-x64_en-us.msi
    • Windows Kits\WindowsSDK\Installers\X86 调试器和 Tools-x86_en-us.msi

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

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

  • 下载"Qt Creator 4.5.0 for Windows 64-bit"

  • 这个版本似乎有 select "CDB Debugger Support" 的选项(在安装捆绑了 Qt Creator 的完整 Qt 包时找不到)

在 QtCreator 中配置套件

在 QtCreator 的说法或术语中,"Kit" 是调试器 + 编译器 + Qt 版本 + 其他的组合。 (从这个意义上说,单词 "Kit" 与我们安装上面的调试器时 "Windows Kits" 的含义不同;这是一个不幸的名称冲突。)设置一个 "QtCreator Kit"通过 selecting 工具 -> 选项 -> 构建 & 运行。我喜欢从最右边的选项卡开始,然后向左移动,结束于 "Kits." 这样做的原因是下面的所有选项卡 (1,2,3) 都需要配置才能完成套件.

在 QtCreator 中配置调试器

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

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

  • 请注意,对于 Visual Studio 2017 x64 位,您需要 "amd64" 版本,即 64 位编译器。如果您想知道为什么列出了这么多编译器——它们是 "cross-compilers." 这意味着它们针对不同的体系结构,例如,"x86_amd64" 是一个创建 64 位的 32 位进程应用;如果您在 32 位计算机上开发 64 位代码(因此称为交叉编译),您将使用此版本。由于本教程假定您 运行 正在使用 64 位 OS,因此请使用 amd64 版本。 ("x86_amd64" 交叉编译器也会生成 64 位代码。) 当我第一次看到 QtCreator 中庞大的编译器 selections 列表时,我不知道该选择哪个。现在你也知道了!见 When compiling x64 code, what's the difference between "x86_amd64" and "amd64"?.

现在配置套件

  1. 单击添加
  2. Name - 给出套件的名称;这将是您在编译应用程序时使用的配置。
  3. 编译器 - Select C 和 C++ 的 "Microsoft Visual C++ Compiler 15.0 (amd64)"。
  4. Debugger - Select "Windows Kit 10 cdb x64" 我们在 "Debuggers" 选项卡上配置的
  5. Qt version - Select "Qt 5.10.0 (msvc2017_64)。使用与 Qt 相同的位数进行编译很重要您将 link 反对的库。
  6. 单击应用

验证调试工作

让我们找点乐子写一个64位程序,然后调试它。一个好的测试是分配大量内存(典型的 32 位 Windows 进程限制为 2GB,请参阅 How much memory can a 32 bit process access on a 64 bit operating system? )。例如,分配 32GB 的 RAM 应该是一个积极的指标,表明我们确实在编译 64 位应用程序。下面是 QtCreator 调试 64 位 Windows 测试程序的屏幕截图:

请注意,我使用的是 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();
}