如何将调试器附加到IIS而不是ASP.NET Development Server?


69

我有一个ASP.NET网站,当我按F5键时它会自动附加到ASP.NET开发服务器上,而当我按F5键时如何附加到IIS工作进程?


对于来到这里寻找要调试ASP.NET应用程序的过程的任何人,它都是iisexpress.exe
Ohad Schneider

Answers:


50

打开项目属性,转到Web选项卡,然后为IIS选择选项。

实际上,这将在IIS中启动该应用程序的实例并附加调试器。如果只想附加到现有的IIS实例,请从调试菜单中选择“附加到进程”。


1
这仅适用于本地IIS服务器,对吗?不能以这种方式在远程IIS服务器上部署/运行/附加到辅助进程吗?(我问这个问题,因为我希望能够做到这一点,但是还没有找到一个合理的方法来做到这一点)。
特洛伊·霍华德

1
是的,仅限本地。我认为要执行您想要的操作,需要先发布站点,然后附加到远程计算机上的进程。这需要安装远程调试器,并且可能会带来一些安全问题。不好玩....
StingyJack

2
附加到过程位于“工具”菜单下
Shiham

1
@nvrtheless-如果在设置IDE时使用“常规开发设置”,则它也位于“调试”下。我想如果您选择特定语言的IDE设置,它只会显示在“工具”下。
StingyJack

2
有一个非常方便的VS2013扩展名为ReAttach:visualstudiogallery.msdn.microsoft.com/…它会记住您之前附加的所有进程,因此您不必通过“附加到进程”来选择它们。
Alexey F

97

调试->附加到处理...

从列表中选择aspnet_wp.exe进程。

如果您正在运行IIS>版本5,则该过程将为w3wp.exe,并且每个应用程序池都有一个(因此,如果您不知道要击中哪个应用程序池,则需要将其附加到所有其中)。


2
我的首选方式是这样避免打开新窗口-并保留打开的浏览器中已有的所有会话状态。
塞缪尔·金

3
w3wp.exe也适用于IIS 6(在Server 2003中)
Ricardo Villamil 2010年

3
@towpse:确保已选中所有用户和所有会话的框,因为IIS在会话0(对于服务)中运行,并且没有像您一样运行。
Orion Adrian

2
另外,w3wp进程按需启动,因此在iisreset之后不会再运行任何进程。当您向站点发出第一个请求时,IIS会启动辅助进程来处理该请求。如果您尝试在Global.asax中调试某些内容,则它是PITA。
ckramer 2011年

2
如果看不到w3wp.exe,请确保选中“显示所有用户的进程”
Jimmyt1988

11

从VS菜单中的Debug-> Attach to Process。

为了知道要附加到哪个w3wp.exe进程,您可以在2008服务器上使用以下命令

c:\%systemroot%\system32\inetsrv\appcmd list wp

在Windows 2003上

c:\%systemroot%\system32\cscript iisapp.vbs

有关更多信息,请参见IIS应用程序池PID

但是,如果可以访问任务管理器(taskmgr.exe),则可以直接在其中看到进程的名称以及进程ID,并且在大多数情况下,该进程的“用户名”列将与应用程序相同池名称,(当然,您必须将这些列设置为在任务管理器中可见,以便查看信息)。

但是请注意,所有方法将仅显示当前正在运行的进程,这意味着,如果您的特定进程由于空闲时间而关闭,则必须首先使用该站点才能在列表中显示该进程。

同样,如果该应用程序是“ Web Garden”(具有多个w3wp.exe),则即使附加到正确的进程之后,也仍然无法保证会遇到断点,因为可能会将访问该站点的流量定向到另一个站点。处理。

还要注意,如果您附加到在发布模式下运行的应用程序,则它将改为在调试模式下运行,这意味着,例如,将没有超时限制(如果您实际上试图解决超时错误)。


如果要附加到远程进程,这里是最佳做法:

  1. 通过打开相关端口或完全禁用防火墙来确保防火墙没有阻塞(记住完成后再次将其打开)。
  2. 您应该在远程计算机上具有Windows域帐户,该帐户在远程计算机上具有管理特权,或者在远程计算机上具有与运行VS的本地计算机相同的用户名和密码的帐户。
  3. 在已安装VS的计算机上,导航至(Visual Studio安装路径)\ Microsoft Visual Studio(当前版本号)\ Common7 \ IDE \ Remote Debugger(远程计算机版本),然后将此文件夹复制并粘贴到远程计算机或共享该文件夹文件夹,以便可以从远程计算机访问它。
  4. 在远程计算机上,以与本地计算机相同的用户身份登录(请参阅步骤2),从那里导航到步骤3的复制或共享文件夹,然后右键单击“ msvsmon.exe”,然后从上下文菜单中选择“运行方式”管理员”。
  5. 远程监控器应该启动,并声称它通常使用(用户)@(远程计算机)或任何其他名称启动了服务器。
  6. 在VS中,从菜单中选择Debug-> Attach To Process,将传输保留在“ Default”上,并为“ Qualifier Name”输入步骤5中的名称。
    如果一切正常,这将显示远程计算机上的进程列表。 。

当然,这个主题还有很多,对于调试本机代码,该过程可能会更简单,但是我在这里列出的步骤在每种情况下都应该起作用。

有关更多信息,请访问http://www.codeproject.com/KB/aspnet/IISRemoteDebugging.aspx或MSDN上的内容,以及该站点上的许多帖子。

希望这会有所帮助。



6

转到Web应用程序的属性。选择“启动选项”部分,然后从“使用默认Web服务器”更改为“使用自定义服务器”。输入“ http:// localhost在基本网址中 ”。

(假设是VS 2008)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.