Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MSVC2017编译器在QtCreator中调试 我安装了Qt,但是在尝试从QtC造饰器中调试C++代码时出错。我在Windows上使用Visual Studio 2017,似乎QtCreator需要的调试器(cdb.exe)没有安装。在使用MSVC2017编译器时,如何配置调试以在QtCreator内处理64位代码?_C++_Qt_Debugging_Visual Studio 2017_Qt Creator - Fatal编程技术网

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

使用MSVC2017编译器在QtCreator中调试 我安装了Qt,但是在尝试从QtC造饰器中调试C++代码时出错。我在Windows上使用Visual Studio 2017,似乎QtCreator需要的调试器(cdb.exe)没有安装。在使用MSVC2017编译器时,如何配置调试以在QtCreator内处理64位代码?,c++,qt,debugging,visual-studio-2017,qt-creator,C++,Qt,Debugging,Visual Studio 2017,Qt Creator,我在这里讨论的是让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位) W

我在这里讨论的是让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提供
    • 通过Windows10SDK
  • 针对Windows桌面64位应用程序
我已经在Windows10和Windows7(x64)上测试了这些步骤,它似乎可以工作。请注意,与Qt安装程序捆绑在一起的QtCreator版本是32位版本,如果您试图使用MSVC进行调试,它将无法开箱即用。这是有文档记录的,但不是一步一步的(请参阅和),也不是所有内容都在一个地方,因此我将在这里提供简单的说明,说明如何使我上面描述的参考系统工作

先决条件
  • Windows 7 x64或Windows 10
  • Visual Studio 2017(使用版本15.5.1进行测试)
假设您已经安装了Win7/Win10和MSVC2017,让我们开始吧

下载Qt
  • 从下载文件qt-opensource-windows-x86-5.10.0.exe
  • 选中“msvc2017 64位”选项进行安装。
    • 此处描述的配置不需要所有其他复选框

安装适用于Windows 10的Windows SDK -

  • 选择“Windows调试工具”并取消选中其他所有选项

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

    • Windows工具包\10\WindowsSDK\Installers\X64调试器和工具-X64_en-us.msi
    • Windows工具包\10\WindowsSDK\Installers\X86调试器和工具-X86_en-us.msi

为QtCreator安装64位独立安装程序 注意:如果在安装Windows调试工具后安装QtCreator,QtCreator将自动检测调试器的位置,从而为您节省创建工具包的麻烦。如果您已经安装了QtCreator,请不要担心,在QtCreator中配置工具包如下所示

  • 下载“适用于Windows 64位的Qt Creator 4.5.0”

  • 此版本似乎有选择“CDB调试器支持”的选项(在安装捆绑了Qt Creator的完整Qt包时找不到)

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

在QtCreator中配置调试器
  • 将路径设置为
    C:\ProgramFiles(x86)\Windows Kits\10\Debuggers\x64\cdb.exe
    ,并为其命名为“Window Kit 10 cdb x64”

  • 设置编译器。确保“微软Visual C++编译器15(AMD64)”在列表中。请注意,如果您已将内容安装到默认路径,QtCreator将自动检测这些位置。如果未列出编译器的路径,请将其添加到编译器

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

现在配置工具包
  • 单击添加
  • 名称-给出工具包的名称;这将是编译应用程序时使用的配置
  • < List>强>编译器< /强> -选择“微软Visual C++编译器15(AMD64)”用于C和C++。< /LI>
  • 调试器-选择我们在“调试器”选项卡上配置的“Windows工具包10 cdb x64”
  • Qt版本-选择“Qt 5.10.0(msvc2017_64)。使用与链接的Qt库相同的位进行编译非常重要
  • 单击应用
  • 验证调试工作 让我们玩一玩,编写一个64位程序,然后调试它。一个好的测试是分配大量内存(典型的32位Windows进程限制为2GB,请参阅)。分配32GB的RAM应该是一个积极的指标,表明我们确实在编译一个64位应用程序。下面是一个scre
    #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();
    }