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

时间:2010-11-08 14:54:40

标签: c# asp.net visual-studio-2010 iis-7.5 remote-debugging

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

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

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

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

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

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

提前致谢!

吉姆

2 个答案:

答案 0 :(得分:21)

这是一个完整的分步指南,因为存在大量分散的信息,并且链接的Microsoft文章假定了大量信息。

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

diagram

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

  1. 安装msvsmon.exe( M icro s oft V isual S tudio 远程计算机上的Mon itor) 您可以通过以下路径在客户端上找到使用Visual Studio安装的可执行文件:

    VS 2010: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger\x86 
    VS 2017: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\X64

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

    new server

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

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

    在Visual Studio中,您将要附加到新服务器上的进程。转到工具>附加到流程或点击 Ctrl + Alt + P

    attach to process

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

    attach dialog

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

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

    Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor named 'User@Remote'.  The Visual Studio Remote Debugger on the target computer cannot connect back to this computer. A firewall may be preventing communication via DCOM to the local computer. Please see Help for assistance.

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

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

    connected

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

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

    new rule

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

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

    visual studio rule

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

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

    attach dialog connected

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

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

    Unable to attach to the process. The Visual Studio Remote Debugger (MSVSMON.EXE) has insufficient privileges to debug this process. To debug this process, launch the remote debugger using 'Run as administrator'. If the remote debugger has been configured to run as a service, ensure that it is running under an account that is a member of the Administrators group.

  8. 点击附加,您会看到可以接受的安全警告:

    security warning

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

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

    Proof of Concept

    进一步阅读

答案 1 :(得分:9)

这是一篇很好的文章:

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

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