我在IIS中运行我的服务。我有一个非致命的异常发生,并正在启动登录。如何将Visual Studio附加到IIS,以便它也调试启动?我知道我可以将visual studio连接到w3wp.exe上,以便在运行时进行调试。
w3wp.exe
jv4diomz1#
将以下内容添加到应用程序的启动代码中:
System.Diagnostics.Debugger.Break();
当这一行被命中时,你将被提示附加一个调试器到进程。请参阅Debugger.Break了解更多详细信息。
f5emj3cl2#
您也可以使用下面的代码片段。同样方便-
System.Diagnostics.Debugger.Launch();
每当你把它放在代码中,它就会在那个位置启动Visual Studio的即时(JIT)调试器(参考截图)。正如在接受的答案中已经建议的那样,您可以将此代码放在应用程序的启动代码的第一行:
然后,您可以在计算机上安装的所有版本中选择并附加到任何新的或已运行的Visual Studio示例。希望这对某人有帮助!
knpiaxh13#
如果你想实时调试,你必须在web服务器上安装Remote Debugging tools。请确保使用您正在运行的Visual Studio版本的正确版本。在调试模式下编译项目,确保在高级预编译设置中选中了“发出调试信息”。将项目部署到服务器。visual studio中的代码必须与您部署的代码完全匹配,这一点至关重要。不要试图调试代码中的微小差异(web.config设置差异是可以的)。使用管理员帐户在服务器上运行远程调试工具。你应该看看上面写着“...等待新的连接”。在visual studio中,使用“附加到进程”菜单中的“附加到进程”附加到服务器上的w3wp进程。确保加密器是server name:port number远程工具正在监听。在某些情况下,您可能需要单击“附加到进程”窗口中的“选择...”按钮,并仅选择“托管(v4.5,v4.0)”代码类型,而不是让它自动确定代码类型。如果你的断点从来没有被击中,因为没有加载符号,这可能是原因。提示:为IIS应用程序分配特定的应用程序池,以便在“附加到进程”窗口中更容易识别。你可能有一堆w3wp.exe进程,你可能不知道你想附加到哪一个。作为实时调试的替代方案,您可以在服务器上运行一个跟踪,将跟踪文件带回visual studio,然后像记录会话一样单步执行代码。这是一个涉及powershell的完全不同的指令集。我更喜欢现场调试,如果它是一个选项。
server name
port number
**更新:**要进入Application_Start(),请回收应用池,然后在任何请求进入之前附加Visual Studio,以确保您(或任何人)发出第一个请求时正在调试。
Application_Start()
3条答案
按热度按时间jv4diomz1#
将以下内容添加到应用程序的启动代码中:
当这一行被命中时,你将被提示附加一个调试器到进程。请参阅Debugger.Break了解更多详细信息。
f5emj3cl2#
您也可以使用下面的代码片段。同样方便-
每当你把它放在代码中,它就会在那个位置启动Visual Studio的即时(JIT)调试器(参考截图)。正如在接受的答案中已经建议的那样,您可以将此代码放在应用程序的启动代码的第一行:
然后,您可以在计算机上安装的所有版本中选择并附加到任何新的或已运行的Visual Studio示例。希望这对某人有帮助!
knpiaxh13#
如果你想实时调试,你必须在web服务器上安装Remote Debugging tools。请确保使用您正在运行的Visual Studio版本的正确版本。
在调试模式下编译项目,确保在高级预编译设置中选中了“发出调试信息”。
将项目部署到服务器。visual studio中的代码必须与您部署的代码完全匹配,这一点至关重要。不要试图调试代码中的微小差异(web.config设置差异是可以的)。
使用管理员帐户在服务器上运行远程调试工具。你应该看看上面写着“...等待新的连接”。
在visual studio中,使用“附加到进程”菜单中的“附加到进程”附加到服务器上的w3wp进程。确保加密器是
server name
:port number
远程工具正在监听。在某些情况下,您可能需要单击“附加到进程”窗口中的“选择...”按钮,并仅选择“托管(v4.5,v4.0)”代码类型,而不是让它自动确定代码类型。如果你的断点从来没有被击中,因为没有加载符号,这可能是原因。提示:为IIS应用程序分配特定的应用程序池,以便在“附加到进程”窗口中更容易识别。你可能有一堆w3wp.exe进程,你可能不知道你想附加到哪一个。
作为实时调试的替代方案,您可以在服务器上运行一个跟踪,将跟踪文件带回visual studio,然后像记录会话一样单步执行代码。这是一个涉及powershell的完全不同的指令集。我更喜欢现场调试,如果它是一个选项。
**更新:**要进入
Application_Start()
,请回收应用池,然后在任何请求进入之前附加Visual Studio,以确保您(或任何人)发出第一个请求时正在调试。