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

Mat*_*aus 21 c++ debugging qt qt-creator visual-studio-2017

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

(我根据https://stackoverflow.com/help/self-answer回答我自己的问题.发布一个更好的答案,我会改变你接受的答案!)

Mat*_*aus 41

我在这里讨论的是让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调试QtCreator调试器引擎),并不是所有东西都放在一个地方,所以我将在这里提供关于如何使参考系统工作的简单说明我在上面描述.

先决条件

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

假设您已安装Win7/Win10和MSVC2017,那么我们就开始吧!

下载Qt

  • Qt官方发布存档下载文件qt-opensource-windows-x86-5.10.0.exe
  • 选中"msvc2017 64位"选项进行安装.
    • 此处描述的配置不需要所有其他复选框

Qt 5.10设置

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

Windows 10 SDK

  • 选择"Windows调试工具"并取消选中其他所有内容

Windows 10 SDK功能选择

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

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

Win SDK调试器安装程序

为QtCreator安装64位STAND-ALONE安装程序

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

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

在此输入图像描述

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

Qt Creator 4.5.0(64位)设置

在QtCreator中配置套件

在QtCreator用语或术语中,"Kit"是调试器+编译器+ Qt版本+其他的组合.(从这个意义上说,"Kit"这个词与我们在上面安装调试器时对"Windows Kits"的含义不同;这是一个不幸的名称冲突.)通过选择工具设置"QtCreator Kit" - >选项 - >构建和运行.我喜欢从最右边的标签开始,向左侧工作,以"套件"结束.原因是需要配置下面的所有标签(1,2,3)以制作完整的套件.

QtCreator套件配置顺序

在QtCreator中配置调试器

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

QtCreator中的调试器选项卡

  • 设置编译器.确保"Microsoft Visual C++编译器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位编译

现在配置套件

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

Qt Creator中的套件设置

验证调试工作

让我们有一些乐趣并编写一个64位程序,然后进行调试.一个好的测试是分配大量内存(典型的32位Windows进程限制为2GB,请参阅64位操作系统上32位进程可以访问多少内存?).例如,分配32GB的RAM应该是一个积极的指标,我们确实在编译64位应用程序.以下是QtCreator调试64位Windows测试程序的屏幕截图:

在Qt Creator中调试64位代码

请注意,我正在使用上面提到的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();
}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您的详细分享,因为此问题已得到解决,您可以在以后将答复标记为答案,它也可以帮助其他社区成员获得相同的问题.感谢您再次分享.祝你今天愉快. (3认同)
  • 优秀的答案。我要补充的一件事是,如果您使用 Visual Studio 安装程序,您可以选择安装最新的 Windows SDK。但是,调试工具似乎没有默认安装在 SDK 中 - 我必须转到控制面板 -&gt; 程序和功能并更改 SDK 安装以包含调试工具。 (3认同)
  • 在安装Windows SDK进行调试之前,我已经安装了Qt Creator。因此,在安装了以下文件之后:** Windows Kits \ 10 \ WindowsSDK \ Installers \ X64 Debuggers and Tools-x64_en-us.msi **,我刚刚关闭并重新打开了Qt creator,它发现自己已安装了调试器。 (2认同)