从VS2010调试在远程IIS服务器上运行的ASP.NET应用程序

只是想知道是否有人能指出我在正确的方向?

我正在尝试调试已部署的 Web应用程序,似乎无法使附件工作。 这是场景:

VS2010安装在我的机器上 – 包含所有源代码。

我的机器上的IE8浏览到生产IIS服务器上的ASP.NET站点(生产站点上的FWIW .pdb文件。)

当我将调试器连接到IE会话,并继续浏览网站时,没有任何断点被击中……所以有效地我不认为我真的在调试网站!

我猜我需要某种远程调试设置? 如果是这种情况,如果有人知道任何URL的帮助,将非常感谢!

提前致谢!

吉姆

这是一篇很好的文章:

http://msdn.microsoft.com/en-us/library/bt727f1t.aspx

在远程计算机上安装远程调试组件,并在开始调试时启动远程调试监视器(msvsmon.exe)

这是一个完整的分步指南,因为有很多分散的信息,链接的Microsoft文章假设了很多信息。

首先,让我们澄清本指南其余部分使用的术语:

图

客户端是您进行开发的计算机
Remote是部署在IIS上运行的代码的计算机

  1. 在远程计算机上安装msvsmon.exe( M icro s oft V isual S tudio Mon itor)。
    您可以在以下路径中找到客户端上随Visual Studio安装的可执行文件:
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger\x86

    该工具启动并运行后,您应该看到以下应用程序:

    新服务器

    调试监视器创建了一个可以远程连接的服务器。 如果您使用的是Windows计算机,则该名称可能是User@Remote 。 记住这个名字,因为你以后会需要它。 如果要直接复制它,可以转到工具>选项,然后您将看到服务器名称。 如果您愿意,甚至可以将其更改为其他内容。

  2. 从这里你可以尝试霰弹枪的方法,看看是否一切正常,但根据你的网络配置,可能会有一些额外的打嗝。 要尝试远程调试,请在Visual Studio中打开项目。 这应该是在IIS上部署的完全相同的项目。

    在Visual Studio中,您需要附加到新服务器上的进程。 转到工具>附加到处理或按Ctrl + Alt + P.

    附加到过程

  3. 在“附加到进程”对话框中,将限定符从当前计算机的名称更改为新服务器名称( User@Remote ),然后按Enter键以查看远程计算机上可用进程的列表:

    附加对话框

  4. 如果一切都马上回来,那你就掌握得很好。 这意味着没有防火墙策略阻止您与远程服务器连接,您可以跳到步骤6。

    或者,如果您收到以下消息,则表示您的防火墙阻止客户端和远程计算机进行通信。

    无法连接到名为“User @ Remote”的Microsoft Visual Studio远程调试监视器。目标计算机上的Visual Studio远程调试程序无法连接回此计算机。防火墙可能阻止通过DCOM与本地计算机进行通信。请参阅帮助以获得帮助。

  5. 如果您无法连接,则可能会出现一系列问题,具体取决于您的域策略。 对于官方防火墙设置,您可以查看Microsoft的配置Windows 7防火墙以进行远程调试 ,但我发现它缺乏详细信息。

    如果附加失败,但您仍然收到用户连接的消息,如下所示:

    连接的

    然后,这意味着问题不在于客户端上的出站规则或远程服务器上的入站规则。 问题更可能是客户端计算机上的入站规则。

    要解决此问题,请在客户端计算机上,转到“控制面板”>“Windows防火墙”>“高级设置”,这将打开具有高级安全性的Windows防火墙 。 选择入站规则,然后右键单击以输入新规则

    新规则

    给规则任何名称。 根据这个SO问题中的建议,我们将允许所有流量通过任何Visual Studio可执行文件,而不是免除特定端口。 转到“程序和服务”,然后选择2010安装的visual studio的完整文件夹路径:
    %ProgramFiles% (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe

    然后确保该规则仅适用于域中的计算机(确保未选中私有和公共)。

    视觉工作室规则

    运气好的话,当你回去附上这个过程时,你应该能够进入远程机器。

  6. 此时,您应该看到远程计算机上所有进程的列表。 如果要调试Windows应用程序,只需选择进程的名称即可。 对于ASP.NET,我们希望附加到w3wp.exe(WWW W orker P rocess)。 如果您没有在列表中看到它,请尝试通过打开您要调试的应用程序的网页来启动服务器。 您可以在localhost上执行此操作,也可以从任何计算机导航到IIS中的地址。

    附加对话连接

    确保为您的应用程序附加正确类型的代码。 您可以选择本机(C ++等)或托管(VB,C#等),或选择自动并让Visual Studio决定。

  7. 如果您收到以下错误,我发现重新打开Visual Studio和msvsmon.exe具有管理员权限修复了该问题

    无法附加到流程。 Visual Studio远程调试程序(MSVSMON.EXE)没有足够的权限来调试此过程。要调试此过程,请使用“以管理员身份运行”启动远程调试程序。如果已将远程调试器配置为作为服务运行,请确保它在作为Administrators组成员的帐户下运行。

  8. 您将看到一个安全警告,您可以通过单击附加来接受:

    安全警告

  9. 我遇到的最后一个问题是要加载调试器文件。 您需要确保正在执行的库与Visual Studio中当前加载的库完全匹配,并且它们在客户端计算机上的解决方案中具有正确的.pdb文件。 您可以通过转到Debug> Windows> Modules或按Ctrl + Alt + U来检查加载了哪些模块以及加载了哪些模块。 有关加载调试器文件的更多信息,您还可以尝试以下任何资源:

    • 停止“断点当前不会被击中”消息
    • 修复“断点当前不会被命中。此文档没有加载任何符号。”

希望它能在这一点上起作用。 现在,您可以捕获对IIS托管代码进行的任何调用,并像开发过程一样逐步执行它们。

概念证明

进一步阅读

  • 如何:设置远程调试
  • 远程IIS调试:调试托管在“远程IIS服务器”上的ASP.NET应用程序