目录

从 0 到 1 学习 Visual Studio Debug 之五:远程调试

有阵子没有更新这个主题,可能让大家误认为已经结束了,其实除了这一篇,后续还会有一些。

还是尽量本着善始善终的原则,我要把这个主题给讲完,并且在结束的时候一定会让大家知道的。

通过大家的反馈来看,这个系列确实也帮助到了不少的人,另外我自己在这个过程中,也对 VS Debug 的使用有了更加系统的认识。

其实,VS Debug 的功能很多,多的超乎想象,所以有很多平时不太常用的功能我就不在这里介绍了,写进教程中的都是我和周围的人在日常工作中能够经常使用到的功能。

本次教程介绍 VS 的远程调试方法(C++)。

什么是远程调试?

我们平时,特别是自学的新手在刚一开始的时候,都是本地编译、本地调试,本机编译好的程序就直接在本机执行。

但是有些情况下,你本机编译好的程序,需要放到另一台机器(目标机)上运行。

此时,你可以在本地的 VS 环境中,对运行在目标机上的程序进行 远程调试。

C# 项目和 http://ASP.NET web 服务器的远程调试方法略有不同,本文不做讲解。

1. 原理

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-b82ba5d17c7200ccaae244cd75683349_1440w.png

目标机:

负责执行目标程序。安装和运行远程工具 (Remote Debugger),等待来自开发机的连接请求。

开发机:

将编译好的程序部署到目标机器上执行。配置 VS 工程,建立与目标机的连接,开始远程调试。

2. 环境要求

目标机必须满足:

Windows 7 以后或者 Windows Server 2008 Service Pack 2 以后。

网络必须满足:

目标机和开发机必须通过网络、工作组、家庭组连接,或者通过网线直连。不支持 Internet 连接。

3. 安装 Remote Debugger

首先,要在目标机器上安装远程调试工具,有两种方法。

方法一:

从微软官网下载远程工具。

注意,一定要安装与 VS 版本和目标机操作系统匹配的远程工具。

例如,你用的是 VS2017,就要下载 VS2017 版的远程工具,另外,还要考虑目标机操作系统位数,是 32 位就要安装 32 位远程工具,是 64 位就要安装 64 位远程工具。

下载地址从这里找吧:

Remote debugging in Visual Studio

方法二:

这是一个更为简单的方法。

在你本地的 VS 安装目录下找到 msvsmon.exe,此文件就是 Remote Debugger。

它的位置在:

1
2
Program Files\Microsoft Visual Studio 15.0\Common7\IDE\Remote Debugger\x86\msvsmon.exe
Program Files\Microsoft Visual Studio 15.0\Common7\IDE\Remote Debugger\x64\msvsmon.exe

可以共享该目录,在目标机上直接运行 Share Folder 中的 msvsmon.exe 即可。

也可以把 msvsmon.exe 所在的整个目录 Copy 到目标机上。

这里同样需要注意,要与目标机的操作系统位数匹配。

4. 配置 Remote Debugger

这一步还是在目标机上。

所在登陆账户,一定要拥有管理员权限。

打开安装好的 Remote Debugger (msvsmon.exe),首次打开时,会出现配置窗口,提醒配置一些参数。

只需要配置一次,再次打开时,不会弹出该窗口。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-cbf2a324aa3ed08eaf7c34d8f65693c3_1440w.png

如果你不清楚你的网络连接方式,比较保险的做法是把所有框都勾选上。

点击配置远程调试按钮之后,会出现如下窗口,代表 Remote Debugger 正在等待来自开发机的连接。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-f8c313a1d1443287e581fdb02a632dd3_1440w-20220116212320598.png

这里可以点击 Tools > Options 菜单,做一些额外的参数配置。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-b5c66f8ce90f00f9d2346b5b0ba424d8_1440w.jpg

有时可能会由于防火墙或者认证等原因,导致连接不上的问题,最极端的方法是完全关闭它们。虽然官方出于安全考虑,并不建议这么做。

假如你确定网络没有任何风险,那么可以关闭两边机器的防火墙。上面窗口中,也可以选择无认证方式。

最大空闲时间设置为 0 代表永远不会超时,一直处于等待状态。

TCP/IP 端口号这里默认给出的是 4022,你可以更改,但一般无需这样做。

关于默认端口号,不同的 VS 版本,是不同的,具体如下。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-1a3d5583020992b191bd3bc21ecf5b49_1440w-20220116212315558.jpg

5. 配置 VS 工程

这一步是对开发机的配置。

在 VS 工程中,打开项目属性,点击调试选项卡,切换到远程 Windows 调试器。

对列出的一些参数进行配置。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-ff4f7d2a5e210f5f21d8180e2ddab6eb_1440w-20220116212405896.png

这里:

C:\remotetemp\mymfc.exe 为目标机上需要执行的程序。

如果要带参数的话,可以在远程命令参数中配置。

C:\remotetemp 为目标机可执行程序所在的目录。

DDXVM6812 为目标机器名称。

如果在目标机 Remote Debugger 中设置了无认证的连接方式,这里同样要选则无认证的远程访问。

配置好后,点击确定。

6. 开始远程调试

将本地机器 VS 编译好的可执行程序部署到目标机上。

一切就绪之后,就可以开启远程调试了。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/v2-e182950c91cafef842e18cb68dcbe75c_1440w.jpg

在 VS 工程中想要查看的代码处设置断点,然后点击上方的**远程调试器,**即可建立与目标机的连接。

注意,此时目标机上的 Remote Debugger 一定要处于等待连接状态。

连接之后,目标机上的 Remote Debugger 显示已连接,可执行程序开始在目标机上运行。

开发机上 VS 中的断点将被击中,此时就可以开始远程调试了,操作跟本地调试没有差别。

远程调试的步骤基本就这些,希望能给大家理清了思路。