使用MSVC2017编译器在QtCreator中调试 我安装了Qt,但是在尝试从QtC造饰器中调试C++代码时出错。我在Windows上使用Visual Studio 2017,似乎QtCreator需要的调试器(cdb.exe)没有安装。在使用MSVC2017编译器时,如何配置调试以在QtCreator内处理64位代码?
我在这里讨论的是让QtCreator使用Visual Studio 2017(MSVC2017)编译器,包括调试!MSVC2017和Qt 5.10的默认安装将允许您编译和运行代码,但默认情况下您无法获得调试支持。我将展示为以下参考系统安装所有内容(包括调试支持)所需的步骤: 参考系使用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
- 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位应用程序
- Windows 7 x64或Windows 10
- Visual Studio 2017(使用版本15.5.1进行测试)
- 从下载文件qt-opensource-windows-x86-5.10.0.exe
- 选中“msvc2017 64位”选项进行安装。
- 此处描述的配置不需要所有其他复选框
- 选择“Windows调试工具”并取消选中其他所有选项
- web安装程序将下载所选组件并创建一个名为“Windows工具包”的文件夹
- 安装这两个文件(x86版本是可选的):
- Windows工具包\10\WindowsSDK\Installers\X64调试器和工具-X64_en-us.msi
- Windows工具包\10\WindowsSDK\Installers\X86调试器和工具-X86_en-us.msi
- 下载“适用于Windows 64位的Qt Creator 4.5.0”
- 此版本似乎有选择“CDB调试器支持”的选项(在安装捆绑了Qt Creator的完整Qt包时找不到)
- 将路径设置为
,并为其命名为“Window Kit 10 cdb x64”C:\ProgramFiles(x86)\Windows Kits\10\Debuggers\x64\cdb.exe
- 设置编译器。确保“微软Visual C++编译器15(AMD64)”在列表中。请注意,如果您已将内容安装到默认路径,QtCreator将自动检测这些位置。如果未列出编译器的路径,请将其添加到编译器
- 请注意,对于Visual Studio 2017 x64位,您需要“amd64”版本,即64位编译器。如果您想知道为什么列出了这么多编译器——它们是“交叉编译器”。这意味着它们针对不同的体系结构,例如,“x86_amd64”是一个32位进程,它创建了一个64位应用程序;如果在32位计算机上开发64位代码(因此称为交叉编译),则将使用此版本。由于本教程假定您在64位操作系统上运行,因此请使用amd64版本。(x86_amd64交叉编译器也将生成64位代码。)当我第一次在QtCreator中看到大量编译器选择时,我不知道选择哪一个。现在你也知道了!看
#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();
}