使用 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"?.
现在配置套件
- 单击添加。
- Name - 给出套件的名称;这将是您在编译应用程序时使用的配置。
- 编译器 - Select C 和 C++ 的 "Microsoft Visual C++ Compiler 15.0 (amd64)"。
- Debugger - Select "Windows Kit 10 cdb x64" 我们在 "Debuggers" 选项卡上配置的
- Qt version - Select "Qt 5.10.0 (msvc2017_64)。使用与 Qt 相同的位数进行编译很重要您将 link 反对的库。
- 单击应用。
验证调试工作
让我们找点乐子写一个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();
}
我已经安装了 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"?.
现在配置套件
- 单击添加。
- Name - 给出套件的名称;这将是您在编译应用程序时使用的配置。
- 编译器 - Select C 和 C++ 的 "Microsoft Visual C++ Compiler 15.0 (amd64)"。
- Debugger - Select "Windows Kit 10 cdb x64" 我们在 "Debuggers" 选项卡上配置的
- Qt version - Select "Qt 5.10.0 (msvc2017_64)。使用与 Qt 相同的位数进行编译很重要您将 link 反对的库。
- 单击应用。
验证调试工作
让我们找点乐子写一个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();
}