我已经安装了Qt,但在尝试从QtCreator中调试C++代码时遇到了错误。我在Windows上使用Visual Studio 2017,似乎QtCreator需要的调试器(cdb.exe)没有安装。当使用MSVC2017编译器时,我该如何配置调试以使其适用于64位代码?
我已经安装了Qt,但在尝试从QtCreator中调试C++代码时遇到了错误。我在Windows上使用Visual Studio 2017,似乎QtCreator需要的调试器(cdb.exe)没有安装。当使用MSVC2017编译器时,我该如何配置调试以使其适用于64位代码?
假设您已经安装了Win7 / Win10和MSVC2017,让我们开始吧!
安装适用于 Windows 10 的 Windows SDK - https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive
安装这两个文件(x86版本是可选的):
注意:如果您在安装Windows调试工具之后安装QtCreator,则QtCreator将自动检测调试器的位置,在创建套件时为您节省麻烦。如果您已经安装了QtCreator,请不用担心,下面将显示如何配置QtCreator中的套件。
在QtCreator的术语中,"Kit"是调试器、编译器、Qt版本等组合。(在这个意义上,当我们安装调试器时,单词"Kit"并不意味着与"Windows Kits"相同;这是一个不幸的名称冲突。)通过选择"工具" -> "选项" -> "构建和运行"来设置"QtCreator Kit"。我喜欢从最右边的选项卡开始,并向左工作,最后结束于"Kits"。原因是所有下面的标签(1,2,3)都需要进行配置才能形成完整的Kit。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
,并将其命名为"Window Kit 10 cdb x64"。设置编译器。确保“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”之间有什么区别?。
让我们写一个64位程序,并对其进行调试。一个好的测试是分配大量内存(典型的32位Windows进程仅限于2GB,请参见32位进程在64位操作系统上可以访问多少内存?)。分配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();
}
工具 -> 选项 -> 构建和运行
移动到了工具 -> 选项 -> 套件
中。 - Martin