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

时间:2015-09-24 11:17:39

标签: c# debugging iis

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

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

我知道我可以将visual studio附加到w3wp.exe进行调试,同时运行它。

3 个答案:

答案 0 :(得分:3)

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

System.Diagnostics.Debugger.Break();

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

答案 1 :(得分:3)

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

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

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

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

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

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

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

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

答案 2 :(得分:2)

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

System.Diagnostics.Debugger.Launch();

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

enter image description here

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