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

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

只是想知道是否有人可以在这里指出正确的方向?

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

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

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

当我将调试器附加到 IE session 并继续浏览站点时,没有断点被击中......所以我不认为我真的在调试站点!??

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

提前致谢!

吉姆

最佳答案

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

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

diagram

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

  • 安装msvsmon.exe(中号 ICRO 小号经常 V isual 小号 tudio 星期一 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 。记住这个名字,因为你以后会用到它。如果你想直接复制它,你可以去工具>选项,你会看到服务器名称。如果您愿意,您甚至可以将其更改为其他内容。
  • 从这里您可以尝试霰弹枪方法,看看是否一切正常,但根据您的网络配置,可能会出现一些额外的问题。要尝试远程调试,请在 Visual Studio 中打开项目。这应该与部署在 IIS 上的项目完全相同。

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

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

    attach dialog
  • 如果一切都立即恢复,那么您将得到妥善处理。这意味着没有防火墙策略阻止您连接远程服务器,您可以跳到第 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.
  • 如果您无法连接,则可能会出现一系列问题,具体取决于您的域策略。对于官方防火墙设置,您可以查看 Microsoft 的 Configure the Windows 7 Firewall for Remote Debugging ,但我发现它缺乏详细信息。

    如果附加失败,但您仍会收到一条消息,指出用户已像这样连接:

    connected

    那么这意味着问题不在于客户端上的出站规则或远程服务器上的入站规则。问题很可能出在客户端计算机上的入站规则上。

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

    new rule

    为规则指定任何名称。根据 this SO question 中的建议,我们将允许所有流量通过任何 Visual Studio 可执行文件,而不是免除特定端口。转到“程序和服务”并选择 Visual Studio 2010 安装的完整文件夹路径:%ProgramFiles% (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
    然后确保该规则仅适用于域内的计算机(确保未选中私有(private)和公共(public))。

    visual studio rule

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

    attach dialog connected

    确保为您的应用程序附加正确类型的代码。您可以在 native (C++ 等)或托管(VB、C# 等)之间进行选择,或者选择自动并让 Visual Studio 决定。
  • 如果出现以下错误,我发现使用管理员权限重新打开 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.
  • 您将看到一个安全警告,您可以通过单击附加来接受该警告:

    security warning
  • 我遇到的最后一个问题是加载调试器文件。您需要确保正在执行的库与当前在 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 托管代码进行的任何调用,并像在开发过程中一样逐步执行它们。

    Proof of Concept

    进一步阅读 :
  • How to: Set Up Remote Debugging
  • Remote IIS Debugging : Debug your ASP.NET Application which is hosted on "Remote IIS Server"
  • 关于c# - 从 VS2010 调试在远程 IIS 服务器上运行的 ASP.NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4124952/

    相关文章:

    c# - 无法将图像添加到 C# WPF .Net Core WPF 应用程序

    C# WebAPI 将文档路径作为参数传递

    css - 更改表 ASP.NET 中复选框列表的 css 样式

    ASP.NET 和 Silverlight 应用程序

    jquery - 当 JavaScript 和 VSDOC 文件不是本地时,如何通过 CDN 获得 IntelliSense 支持?

    c++ - Visual Studio 2010 - 函数未内联 - 为什么?

    visual-studio-2010 - MVC3重新安装VS2010 SP1

    c# - Application_Error 未捕获 404 类型的错误

    c# - 无法将类型 'double' 隐式转换为 'RadTextBox'

    c# - 如何访问 ApiController 中的 Response