Visual Studio 2012 中的远程调试
Posted
技术标签:
【中文标题】Visual Studio 2012 中的远程调试【英文标题】:Remote Debuggging in Visual Studio 2012 【发布时间】:2013-08-01 18:58:47 【问题描述】:我试图远程调试安装在客户端 Windows Server 2012 中的 ASP .net 应用程序。我在远程机器上安装了远程调试器并以管理员模式运行它。 (甚至之后)在Microsoft instructions 之后,我遇到了严重的错误——其中大部分是配置错误,说明中没有详细说明(或忽略)。
在所有设置障碍之后,我设法附加了 W3WP.EXE 进程,但我无法调试远程应用程序。
调试器给出标准警告 - 没有为此文档加载任何符号
(我尝试将 .Pdb 文件复制到远程计算机 - 确保本地副本和远程副本中的版本相同)。
我是否缺少任何步骤?详细的演练会有所帮助。
【问题讨论】:
【参考方案1】:没有明确记录的一个步骤是,在远程应用程序 web.config 文件中,编译调试必须设置为 true:
<system.web>
<compilation targetFramework="4.5" debug="true">
...
【讨论】:
【参考方案2】:考虑以下情况:
我们在客户端机器上部署了一个 Web 应用程序,客户端报告了一个错误。然后我们尝试在我们的本地环境(代码存在的地方)中复制问题,但未能成功。现在有两种调试客户端安装的方法——通过日志文件或通过 Visual Studio 调试模式。如果我们的日志记录不详细,我们将在故障排除方面做噩梦。另一种选择是在服务器机器上安装 Visual Studio(这不是一个好主意)。
为了解决这个远程调试问题,我们可以使用一个叫做远程调试监视器(MSVSMON.EXE)的小工具。它允许您从运行 Visual Studio 的另一台计算机(本地开发环境)运行、调试和测试在一台设备(客户端计算机)上运行的应用程序。
先决条件:
远程设备和 Visual Studio 计算机必须通过网络连接或通过以太网电缆直接连接。不支持通过 Internet 进行调试。
远程设备必须运行远程调试组件。
您必须是管理员才能在远程设备上安装远程调试器。要与远程调试器通信,您必须拥有远程设备的用户访问权限。
安装:
-
从Microsoft download center 下载Visual Studio 远程调试器安装程序。在远程设备上运行与操作系统(x86、x64、ARM)匹配的安装程序(客户端机器 - 请记住,您需要管理员权限才能安装它)。
首次安装并启动远程调试器后 - 将出现配置远程调试对话框
如果未安装 Windows 服务 API,请选择“安装”按钮。
选择您希望远程调试器与之通信的网络类型。必须至少选择一种网络类型。
要更改身份验证模式或指定远程调试器的超时值,请选择远程调试监视器工具菜单上的选项。
(您可以选择在 No Authentication 模式下运行远程调试器,但强烈建议不要使用此模式。在此模式下运行时没有网络安全性。只有在您确定网络正常时才选择 No Authentication 模式不会受到恶意或恶意流量的威胁。)
默认情况下,远程设备的管理员可以连接到远程调试器。要授予或拒绝其他用户使用远程调试器的权限,请在 工具 菜单上选择 Permissions。
说明:
在连接到客户端计算机之前,首先在客户端 PC 上启动一个工作进程。要启动您需要运行应用程序的工作进程,IIS 将完成其余的工作。
启动后,打开开发原始代码的 Visual Studio 实例并导航到 Debug -> Attach to Process
李>默认情况下,这会列出本地计算机中运行的进程。
要连接到远程服务器的进程,请在限定符字段(可编辑字段)中输入机器名称。可以从远程调试监视器获得此详细信息。 Remote Debugging Monitor (MSVSMON.EXE) 启动后,它会显示机器名称和端口号。
如果您在域外访问远程调试监视器,它将提示进行身份验证。授权基于远程调试监视器中配置的权限(在前面讨论的权限设置下)。
连接后,我们可以附加到所需的进程来调试应用程序。在这种情况下,为了调试我们附加到远程机器的 W3WP.exe 的 ASP .Net 应用程序(客户端安装)。
现在 Visual Studio 调试将在本地计算机(开发环境)上按预期工作。对于需要更高权限的进程,您需要在远程机器上以管理员身份运行远程调试监视器 (MSVSMON.EXE)。
疑难解答:
有时即使您附加了正确的进程,VS 调试模式也不会检测到该进程。这可能是由于以下原因之一:
• 确保将随程序集生成的 .PDB 文件复制到远程计算机上的同一文件夹中。这将允许调试器获取调试符号。
• 确保您使用的是正确版本的 MSVSMON.exe – 64 位版本用于调试 64 位 C# 应用程序 – 不能与 x86 应用程序实例一起使用。
参考资料: 此过程的一部分取自 Microsoft instructions、blog post 和 stack overflow discussion。
【讨论】:
对我来说问题是,在我的开发机器上,我所有的 Visual Studio 项目都在 D: 驱动器上,而服务器只有 C: 驱动器 + 我正在开发 ASP.NET 网站。我解决问题的方法是去 -> 项目属性 -> 构建 -> 输出路径 -> c:\inetpub\wwwroot\mysite\bin。这样,我的开发机器和服务器上的 .pdb 路径就变得相同了。 要添加的一件事是调试 |选项 |调试 |一般 |取消单击要求源文件与原始版本完全匹配。我的 2 美分 这个答案并没有真正解决我心中的原始问题。【参考方案3】:我有一个问题,我使用最新的 .NET 框架 (4.8) 创建了一个 ASP.NET 应用程序。 更改为 4.6.1 后(产生了很多问题),我终于能够调试远程应用程序了。
【讨论】:
以上是关于Visual Studio 2012 中的远程调试的主要内容,如果未能解决你的问题,请参考以下文章