从 VS2010 调试远程 IIS 服务器上运行的 ASP.NET 应用程序
Posted
技术标签:
【中文标题】从 VS2010 调试远程 IIS 服务器上运行的 ASP.NET 应用程序【英文标题】:Debug ASP.NET application running on remote IIS Server from VS2010 【发布时间】:2011-05-06 17:07:43 【问题描述】:只是想知道是否有人可以在这里为我指出正确的方向?
我正在尝试调试 已部署 Web 应用程序,但似乎无法使附加工作正常。 这是场景:
VS2010 安装在我的机器上 - 带有所有源代码。
我的机器上的 IE8 浏览到生产 IIS 服务器上的 ASP.NET 站点(生产站点上的 FWIW .pdb 文件。)
当我将调试器附加到 IE 会话并继续浏览该站点时,没有遇到断点...所以我认为我并没有真正调试该站点!??
我猜我需要某种远程调试设置?如果是这种情况,如果有人知道任何可以提供帮助的 URL,将不胜感激!
提前致谢!
吉姆
【问题讨论】:
【参考方案1】:这是一篇很好的文章:
http://msdn.microsoft.com/en-us/library/bt727f1t.aspx
在远程计算机上安装远程调试组件并在开始调试时启动远程调试监视器 (msvsmon.exe)
【讨论】:
虽然它并没有给我我所需要的一切......看到这个问题:***.com/questions/4213286/…【参考方案2】:这里有一个完整的分步指南,因为有很多零散的信息,而链接的 Microsoft 文章假设了很多信息。
首先让我们澄清一下本指南其余部分使用的术语:
Client 是您进行开发的计算机Remote 是已部署代码并在 IIS 上运行的计算机
安装 msvsmon.exe(Microsoft VisualStudio Monitor) 在远程计算机上。 您可以通过以下路径在客户端上找到随 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
当工具启动并运行时,您应该会看到以下应用程序:
调试监视器创建了一个可以远程连接的服务器。如果您使用的是 Windows 计算机,则名称可能是 <i>User@Remote</i>
。记住这个名字,因为你以后会用到它。如果你想直接复制它,你可以去工具>选项,你会看到服务器名称。如果您愿意,您甚至可以将其更改为其他内容。
您可以从这里尝试霰弹枪方法,看看是否一切正常,但根据您的网络配置,可能会有一些额外的问题。要尝试远程调试,请在 Visual Studio 中打开项目。这应该与部署在 IIS 上的项目完全相同。
在 Visual Studio 中,您需要附加到新服务器上的进程。转到工具 > 附加到进程或点击 Ctrl + Alt + P
在“附加到进程”对话框中,将限定符从当前计算机的名称更改为新的服务器名称 (<i>User@Remote</i>
),然后按 Enter 以查看远程计算机上可用进程的列表:
如果一切都立即恢复,那么您的情况就很好。这意味着没有防火墙策略阻止您连接远程服务器,您可以跳到第 6 步。
或者,如果您收到以下消息,则表示您的防火墙正在阻止客户端和远程框进行通信。
如果您无法连接,则可能存在一系列问题,具体取决于您的域政策。官方的防火墙设置可以参考微软的Configure the Windows 7 Firewall for Remote Debugging,但是我觉得不够详细。
如果附加失败,但您仍然会收到用户连接的消息,如下所示:
那么这意味着问题不在于客户端的出站规则或远程服务器上的入站规则。问题很可能出在客户端计算机上的入站规则上。
要解决此问题,请在客户端计算机上转到“控制面板”>“Windows 防火墙”>“高级设置”,这将打开 具有高级安全性的 Windows 防火墙。选择入站规则并右键单击输入一个新规则:
给规则起任何名字。根据this SO question 中的建议,我们将允许任何 Visual Studio 可执行文件的所有流量通过,而不是免除特定端口。转到“程序和服务”并选择 Visual Studio 2010 安装的完整文件夹路径:%ProgramFiles% (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
然后确保该规则仅适用于域内的计算机(确保未选中私有和公共)。
运气好的话,当你返回附加进程时,你应该能够进入远程机器。
此时,您应该会看到远程计算机上所有进程的列表。如果您想调试 Windows 应用程序,您只需选择进程的名称。对于 ASP.NET,我们希望附加到 w3wp.exe(WWW Worker P进程)。如果您没有在列表中看到它,请尝试通过打开您要调试的应用程序的网页来启动服务器。您可以在 localhost 上执行此操作,也可以从任何计算机导航到 IIS 中的地址。
确保为您的应用程序附加正确类型的代码。您可以在原生(C++ 等)或托管(VB、C# 等)之间进行选择,或者选择自动并让 Visual Studio 决定。
如果您收到以下错误,我发现以管理员权限重新打开 Visual Studio 和 msvsmon.exe 解决了问题
您会看到一个安全警告,您可以通过单击附加来接受:
我遇到的最后一个问题是加载调试器文件。您需要确保正在执行的库与当前在 Visual Studio 中加载的库完全匹配,并且它们在客户端计算机上的解决方案中具有正确的 .pdb 文件。您可以通过转到 Debug > Windows > Modules 或点击 Ctrl + Alt + U 来检查加载了哪些模块以及它们从哪里加载。 有关加载调试器文件的更多信息,您还可以尝试以下任何资源:
Stopping The "Breakpoint Will Not Currently Be Hit" Message Fixing "The breakpoint will not currently be hit. No symbols have been loaded for this document."希望它在这一点上对你有用。现在,您可以捕获对 IIS 托管代码的任何调用,并像在开发过程中一样单步执行它们。
进一步阅读:
How to: Set Up Remote Debugging Remote IIS Debugging : Debug your ASP.NET Application which is hosted on "Remote IIS Server"【讨论】:
感谢您的出色回答。我只有一个技巧,我要添加 - 如果您需要跨域调试,只需将远程计算机的 ip 地址和来自 Visual Studio 远程调试器监视器选项的主机名添加到本地计算机上的最热文件中以上是关于从 VS2010 调试远程 IIS 服务器上运行的 ASP.NET 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 VS2010 中停止在 IIS 上调试 Web 应用程序需要很长时间
IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统