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 中的远程调试的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2012 分析远程调试过程

我可以在 Windows XP 上使用 Visual Studio 2010 远程调试器从 Visual Studio 2012 调试 .Net 4.0 应用程序吗?

无法在 Windows Server 2008 上运行 Visual Studio 2012 远程调试器

远程进程的 Visual Studio 2012 调试未按预期工作

Visual Studio 远程调试 - 在同一域中找不到计算机

Visual Studio 2012 远程操作花费的时间比预期的要长