远程调试适用于需要在本机调试在其他 Windows 设备上运行的程序,典型的比如调试 Surface 上的程序。

目标 Windows 主机不具备安装 Visual Studio 开发环境条件的,也可以用远程调试来进行调试。

微软MSDN官方有文章讲解如何进行远程调试,链接:Remote Debugging

下载安装远程调试工具

根据所使用的 Visual Studio 版本下载对应的远程调试工具,VS2015 版本的下载链接在此:Remote Tools for Visual Studio 2015

远程调试工具根据架构分别有 x86,x64 和 ARM 版本,根据开发主机和调试目标设备的架构进行下载,注意下载版本需要与机器架构一致,即 x64 的机器必须安装 x64 版本的远程调试工具,不能使用 x86 版本的(在安装过程中会提示不支持)。

在开发主机上和调试目标设备上分别安装远程调试工具。

远程调试工具配置

远程调试需要开发主机和目标设备处于同一局域网、工作组或者家庭组。远程调试不能通过 Internet 连接。

1. 目标设备配置

首先,需要设置目标设备上的远程调试器。

运行目标设备上安装好的 Remote Debugger,首次运行会提示进行配置,按照默认配置就好,主要是添加防火墙例外,另外一点是是否将远程调试配置成服务,根据需要或者参照官方文章进行配置。

另外,我们需要在目标设备上添加一个账户,用于开发主机连接到目标主机上的 Remote Debugger。打开控制面板的用户帐户,新建一个普通账户,用户名为 debug,同时设置一个密码。

点击 Remote Debugger 的菜单项 Tools/Options,默认选中了 “Windows Authentication”,点击右侧的 “Permissions…” 按钮,进入权限设置对话框。点击 “Add” 手动输入 debug 账户名,添加 debug 账户的调试权限。同时需要设置一下 “Maximum idle time” ,这个是指 Remote Debugger 运行时的最大空闲时间,如果超过这个时间,Debugger 就会自动关闭,建议设置较长时间,比如 3600 (1小时),否则可能需要频繁手动启动 Remote Debugger。

这样目标设备上的配置完成。

PS:

  • 调试 .NET 程序只能使用 “Windows Authentication”,不支持 “No Authentication” 选项。
  • 可能每次启动 Remote Debugger 都需要重新添加 “Permissions…” 账户。

2. 开发主机配置

然后,需要配置开发主机上的调试环境。

打开需要进行远程调试的工程,打开工程的 Properties 页面,选择 Debug 标签,勾选其中的 Use remote machine 选项,然后填写入目标设备的名称,这个名称可以打开目标设备的系统信息看到,VS 会自动在其后添加端口号。这里同样可以填写目标设备IP。此外确保 Working directiory 为空,下方 Enable native code debugging 未被选中。

这时候基本的远程调试就可以用了,但是我们需要在项目编译后将文件手动复制到远程主机上才能调试,这样很不方便(每次重新编译都需要重新复制)。官方文章中也没有提到如何实现自动部署。

我们可以使用 Windows 文件共享来解决这个问题。

  1. 启用开发主机上的 Guest 账户。进入控制面板/用户帐户,启用 Guest 账户,同时,进入 控制面板/系统和安全/管理工具/本地安全策略,从左侧打开 本地策略/用户权限分配,右侧找到拒绝从网络访问这台计算机,打开,然后删除掉 Guest 账户并保存。这样目标设备就可以通过局域网共享访问这台计算机的文件了。

  2. 在开发主机上新建一个 Shared 目录,右键设置共享,添加 Guest 账户为读取权限。

  3. 修改工程 Properties 页面,选择 Build 标签,修改下面 OutputOutput path 路径为共享目录路径,注意这里的应该为 \\XXX\Shared\project_name\bin\Debug\XXX 部分是开发主机的名称。这里不能直接使用本机的目录路径,否则目标设备无法访问。

启动项目调试,VS 会自动搜索目标设备名,如果找到则会提示输入认证用的用户名和密码,这里输入 debug 和 用户密码即可。

这样就可以开始程序调试了。