教程:在远程 Windows 计算机上调试 CMake 项目

本教程使用 Windows 上的 Visual Studio C++ 来创建和生成一个可以在远程 Windows 计算机上部署和调试的 CMake 项目。 本教程特定于 Windows ARM64,但可以对这些步骤进行通用化,使其适用于其他体系结构。

在 Visual Studio 中,ARM64 的默认调试体验是远程调试 ARM64 Windows 计算机。 配置调试设置,如本教程中所示。 否则,当你试图调试 ARM64 CMake 项目时,会收到一个错误:Visual Studio 找不到远程计算机。

本教程介绍以下操作:

  • 创建 CMake 项目
  • 配置要为 ARM64 生成的 CMake 项目
  • 将 CMake 项目配置为在远程 ARM64 Windows 计算机上运行
  • 调试在远程 ARM64 Windows 计算机上运行的 CMake 项目

先决条件

在主机上

若要设置 Visual Studio 以用于进行跨平台 C++ 开发,请安装目标体系结构的生成工具。 对于本教程,请按照以下步骤安装 ARM64 生成工具:

  1. 运行 Visual Studio 安装程序。 如果尚未安装 Visual Studio,请参阅安装 Visual Studio
  2. 在 Visual Studio 安装程序主屏幕上,选择“修改”
  3. 在顶部的选项中,选择“单个组件”
  4. 向下滚动到“编译器、生成工具和运行时”部分
  5. 确保选择了以下选项:
    • 用于 Windows 的 C++ CMake 工具
    • MSVC v142 - VS 2019 C++ ARM64 生成工具(最新版本) 关键是选择 ARM64 生成工具而不是 ARM 生成工具(查找 64),并选择与 VS 2019 匹配的版本。
  6. 选择“修改”以安装工具

在远程计算机上

  1. 在远程计算机上安装远程工具。 对于本教程,请按照下载并安装远程工具中的说明安装 ARM64 工具。
  2. 在远程计算机上启动并配置远程调试器。 对于本教程,请遵循远程 Windows 计算机上设置远程调试器中的说明进行操作。

创建 CMake 项目

在 Windows 主机上:

  1. 运行 Visual Studio
  2. 从主菜单中,选择“文件”>“新建”>“项目”
  3. 选择“CMake 项目”>“下一步”
  4. 为项目提供名称,然后选择一个位置。 然后选择“创建”。

给 Visual Studio 一些时间来创建项目并填充“解决方案资源管理器”

配置 ARM64

若要面向 ARM64 Windows 计算机,需要使用 ARM64 生成工具进行生成。

选择 Visual Studio“配置”下拉列表,然后选择“管理配置”

Choose Manage Configurations in the Visual Studio configurations drop-down.

通过选择“添加新配置”(绿色的 + 按钮)添加新配置。
在出现的“CMakeSettings”对话框中,选择“arm64-debug”,然后选择“选择”

Add arm64-debug configuration.

此命令将名为 arm64-Debug 的调试配置添加到 文件中CmakeSettings.json。 此配置名称是唯一的、友好的名称,它使你更容易在“配置”下拉列表中标识这些设置

“工具集”下拉列表设置为 msvc_arm64_x64。 现在,设置应如下所示:

CMake settings dialog.

注意

在“工具集”下拉列表中,“msvc_arm64”选择要交叉编译到 ARM64 的 32 位主机工具,而 msvc_arm64 x64 选择要交叉编译到 ARM64 的 64 位主机工具(这是你将在本教程中执行的操作)。 有关可用工具集环境的详细信息,请参阅预定义的环境

保存 CMakeSettings.json 文件。 从“配置”下拉列表选择“arm64-debug”。 (保存 文件后,它可能需要一段时间才能显示在列表中)CMakeSettings.json

Ensure that arm64-debug is selected in the Visual Studio configurations drop-down.

添加调试配置文件

接下来,添加告诉 Visual Studio 在哪里可以找到远程计算机的配置信息,以及其他配置详细信息。

通过选择“切换视图”按钮,将“解决方案资源管理器”视图更改为目标视图

Solution explorer switch view button.

然后,在“解决方案资源管理器”中,双击“CMake 目标视图”以查看项目

打开项目文件夹(在本例中为“CMakeProject3 项目”),然后右键单击可执行文件并选择“添加调试配置”

Select add debug configuration.

此命令会在项目中创建 文件launch.vs.json。 打开它并更改以下条目以启用远程调试:

  • projectTarget:如果按照上述说明从“解决方案资源管理器”目标视图添加调试配置文件,则会设置此值
  • remoteMachineName:设置为远程 ARM64 计算机的 IP 地址或其计算机名称。

有关 launch.vs.json 设置的详细信息,请参阅 launch.vs.json 架构参考

注意

如果在“解决方案资源管理器”中使用的是文件夹视图而不是目标视图,请右键单击 文件并选择“添加调试配置”CMakeLists.txt。 此体验与从目标视图添加调试配置的不同之处在于:

  • 系统将要求你选择调试器(选择“C/C++ 远程 Windows 调试”)
  • Visual Studio 将在 文件中提供较少的配置模板信息,因此需要自行添加launch.vs.json。 需要提供 remoteMachineNameprojectTarget 条目。 从目标视图添加配置时,只需指定 remoteMachineName
  • 对于 projectTarget 设置值,请查看“启动项”下拉列表以获取目标的唯一名称,例如,在本教程中为 CMakeProject3.exe

在远程 Windows 计算机上启动远程调试器监视器

在运行 CMake 项目之前,请确保在远程 Windows 计算机上运行 Visual Studio 2019 远程调试器。 可能需要根据身份验证情况更改远程调试器选项。

例如,在远程计算机上,从 Visual Studio 远程调试器菜单栏中,选择“工具”>“选项”。 设置“身份验证模式”以匹配环境的设置方式

Remote debugger authentication options.

然后,在主机上的 Visual Studio 中,更新 文件以进行匹配launch.vs.json。 例如,如果在远程调试器上选择“无需身份验证”,则可将 "authenticationType": "none" 添加到 configurations 部分中的 launch.vs.json 来更新项目中的 launch.vs.json 文件。 否则,"authenticationType" 默认为 "windows",不需要显式声明。 此示例显示了针对无需身份验证配置的 文件launch.vs.json

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
        "type": "remoteWindows",
        "authenticationType": "none"
        "name": "CMakeLists.txt",
        "project": "CMakeLists.txt",
        "projectTarget": "CMakeProject3.exe",
        "remoteMachineName": "<ip address goes here>",
        "cwd": "${debugInfo.defaultWorkingDirectory}",
        "program": "${debugInfo.fullTargetPath}",
        "deploy": [],
        "args": [],
        "env": {}
    },
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "CMakeProject3.exe",
      "name": "CMakeProject3.exe"
    }
  ]
}

调试应用

在主机上的 Visual Studio“解决方案资源管理器”中,打开 CMake 项目的 CPP 文件。 如果仍处于“CMake 目标视图”,则需要打开“(executable)”节点才能看到该文件

默认的 CPP 文件是一个简单的 hello world 控制台应用。 在 return 0; 上设置断点。

在 Visual Studio 工具栏上,使用“启动项”下拉列表选择在 文件中为 "name" 指定的名称launch.vs.json

Example startup item dropdown with CMakeProject3.exe selected.

若要开始调试,请在 Visual Studio 工具栏上选择“调试”>“开始调试”(或按“F5”)

如果没有启动,请确保在 文件中正确设置以下内容launch.vs.json

  • "remoteMachineName" 应设置为远程 ARM64 Windows 计算机的 IP 地址或计算机名称。
  • "name" 应与 Visual Studio 启动项下拉列表中的选择相匹配。
  • "projectTarget" 应与要调试的 CMake 目标的名称匹配。
  • "type" 应为 "remoteWindows"
  • 如果远程调试器上的身份验证类型设置为“无需身份验证”,则应该在 文件中设置 "authenticationType": "none"launch.vs.json
  • 如果使用的是 Windows 身份验证,请在出现提示时使用远程计算机可识别的帐户登录。

项目生成后,应用应出现在远程 ARM64 Windows 计算机上:

Hello CMake console app running on remote Windows ARM64 machine.

应在 return 0; 的断点处停止主机上的 Visual Studio。

已了解的内容

在本教程中,你已创建 CMake 项目,将其配置为在 ARM64 上针对 Windows 进行生成,并在远程 ARM64 Windows 计算机上对其进行了调试。

后续步骤

了解有关在 Visual Studio 中配置和调试 CMake 项目的更多信息: