繁体   English   中英

如何使用IIS中托管的服务调试启动例外?

[英]How to debug startup exceptions with service hosted in IIS?

我在IIS中运行我的服务。 我发生了非致命异常并在启动时登录。

如何将Visual Studio连接到IIS以便它还可以调试启动?

我知道我可以将visual studio连接到w3wp.exe以便在运行时进行调试。

将以下内容添加到应用程序的启动代码中:

System.Diagnostics.Debugger.Break();

命中此行时,系统将提示您将调试程序附加到该进程。 有关更多详细信息,请参阅Debugger.Break

如果要进行调试,则必须在Web服务器上安装远程调试工具 确保为正在运行的Visual Studio版本使用正确的版本。

在调试模式下编译项目,确保在“高级预编译设置”中选中“发出调试信息”。

将项目部署到服务器。 Visual Studio中的代码与您部署的代码完全匹配至关重要。 不要尝试调试代码中的微小差异(web.config设置差异是可以的)。

使用管理员帐户在服务器上运行远程调试工具。 你应该看到它说“......等待新的联系”。

在visual studio中,使用Debug菜单中的Attach to Process连接到服务器上的w3wp进程。 确保限定符是server name :远程工具正在侦听的port number 在某些情况下,您可能需要单击“附加到进程”窗口中的“选择...”按钮,并仅选择“托管(v4.5,v4.0)”代码类型,而不是让它自动确定代码类型。 如果您的断点永远不会因为没有加载符号而被击中,这可能就是原因。

提示:将特定的应用程序池分配给IIS应用程序,以便在“附加到进程”窗口中更容易识别。 您可能有一堆w3wp.exe进程,您可能不知道要附加哪个进程。

作为实时调试的替代方法,您可以在服务器上运行intellitrace,将跟踪文件带回visual studio并逐步执行代码,就像它是一个记录的会话一样。 这是涉及powershell的整套其他指令。 如果是一个选项,我更喜欢实时调试。

更新:要进入Application_Start() ,请回收应用程序池,然后在任何请求进入之前附加Visual Studio,以确保在您(或任何人)发出第一个请求时进行调试。

您还可以使用下面的代码段。 它同样方便 -

System.Diagnostics.Debugger.Launch();

无论你将它放在代码中,它都会在该位置启动Visual Studio的JIT调试器,如下所示。 正如已接受的答案中所建议的那样,您可以将此代码放在第一行的应用程序启动代码中:

在此输入图像描述

然后,您可以选择并附加到计算机上安装的所有版本的任何新的或已在运行的Visual Studio实例。 希望这有助于某人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM