Featured image of post Visual Studio 远程调试

Visual Studio 远程调试

简介

Visual Studio 支持远程调试。即本机调试远程计算机程序。

远程调试器组件

这在某些场景很实用,其中一个场景为输入框调试时,焦点会转移到VS上,导致无法按预期调试。那么采用远程调试的方式,就能避免这个问题了。

准备远程调试

在测试机器(或虚拟机)上安装 Visual Studio 远程调试工具 (Remote Tools for Visual Studio),版本必须和你开发机上的 VS 对应(比如 VS 2022 要下 VS 2022 Remote Tools)。

本地搜索 msvsmon.exe,选择对应架构的文件夹,将此文件夹拷贝到测试机(或虚拟机)

比如:

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

Program Files\Microsoft Visual Studio 17.0\Common7\IDE\Remote Debugger\x86\msvsmon.exe

image-20250822125441829

或者官网下载 Remote Tools 安装包,下载地址:微软官方 Remote Tools

在测试机(或者虚拟机)里打开 msvsmon.exe 程序,首次启动时会有配置弹窗:

image-20250822113753934

然后,在菜单栏-工具-选项,选择无身份验证(测试环境方便)或配置 Windows 身份验证。

image-20250822114530031

部署调试版本程序

在开发机上将 Debug 版本对应的可执行文件(包括 exe、dll、pdb 文件)拷贝到测试机(或者虚拟机),确保能够正常运行。

配置远程调试

方法一

右键单击项目并选择 属性。打开 调试 选项卡。

将“要启动的调试器”更改为“远程 Windows 调试器”。

image-20250823175103324

image-20250823171937591

配置相关属性:

  • 远程命令:填入测试机(或虚拟机)可执行文件路径。如 C:\Users\Leo\Desktop\remote_test\VirtualMemory.exe
  • 工作目录:填入测试机(或虚拟机)可执行文件所在目录。如:C:\Users\Leo\Desktop\remote_test
  • 远程服务器名称:目标机器名称。msvsmon.exe 日志显示的名称,如 DESKTOP-RNT4TEI。这里也可以 IP+端口形式连接
  • 连接方式:选择不带身份验证的远程访问,与填入测试机(或虚拟机)msvsmon.exe 一致
  • 调试器类型:仅限本机
  • 部署目录:自动部署可执行文件(可选)。比如填 C:\Users\Leo\Desktop\remote_test

当你配置了部署目录,可在配置管理器里,将部署勾选上。

image-20250823175848850

之后即可启动调试。将会自动连接并调试测试机(或虚拟机)的程序。

连接成功后,测试机(或虚拟机)msvsmon.exe 会显示对应日志。

image-20250823173139657

[!tip]

还可配置自动部署,修改代码后自动部署到测试机(或虚拟机)进行远程调试。

方法二

通过附加到进程的方式进行调试。

在开发机 VS ,菜单栏-调试-附加到进程,连接类型选“远程(Windows - 无身份验证)”,然后查找,顺利的话,将会显示对应的远程调试目标。

image-20250822114147521

image-20250822114225072

连接成功后,再选择对应进程,附加到该进程上:

image-20250822130416450

之后即可开始调试。

[!tip]

确认模块是否加载:

附加成功后,在 VS - 调试 - 窗口 - 模块 (Modules) 查看对应目标是否已加载。如果可执行文件路径正确,VS 会自动匹配 PDB 并绑定断点。

https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging?view=vs-2022

https://learn.microsoft.com/zh-cn/troubleshoot/developer/visualstudio/debuggers/troubleshooting-remote-debugging?toc=%2Fvisualstudio%2Fdebugger%2Ftoc.json&view=vs-2022

Licensed under CC BY-NC-SA 4.0