【发布时间】:2013-11-09 01:47:23
【问题描述】:
所以我正在尝试在 MVC4 中调试一个进程。我发送 POST 请求,观察它操作数据库等。但是,在我看到我想看到的信息后,我单击“停止调试”。在任何典型的 GUI .NET 应用程序中,我认为该进程会终止,但它会继续执行。如果我对文件进行任何更改并尝试再次调试,则不会命中断点,因为文件与之前运行的仍在运行的进程相比并没有过期。此时我有 2 个选择 - 让它运行或使用任务管理器终止 w3wp.exe 任务以继续调试。
我已尝试单击调试 -> 全部终止,但进程仍在继续执行。我知道这一点是因为我附加到进程(调试 -> 附加到进程)并且它在整个执行过程中在我的许多断点之一处暂停。
提到我正在使用 Google Chrome 将 POST 请求发送到控制器,所以它可能不会终止,因为我没有使用 IE - 但是,我确实认为有比使用 IE 更好的解决方案浏览器。
为了解决这个问题,我必须进入 Windows 任务管理器并终止 IIS 进程 (w3wp.exe),这看起来非常混乱。有什么想法吗?
【问题讨论】:
-
我怀疑你一定遗漏了什么。虽然 w3wp.exe 确实不会终止,但当您重新启动调试会话时,它将使用您更新的代码(它将编译新的程序集并且 IIS 会自然生成一个将使用您的新文件的新应用程序域)。在没有终止 w3wp.exe 的情况下,在新会话中调试这些新文件应该不会有任何困难。
-
这就是我的想法,但它继续使用以前编译的二进制文件中的代码。我认为这是因为编译后的二进制文件被 w3wp.exe 锁定,而 VS2012 不会更新被锁定的二进制文件。重要的是要说明执行此过程的时间需要几分钟,因此可能是因为我试图在它仍在执行的时间范围内再次执行它...
-
如果您的 Web 进程确实需要一段时间,那么您确实可以看到您描述的问题。新的应用程序域仅在为新请求提供服务时才是相关的。如果您尝试进入现有的长时间运行的请求,那么您将看不到您的更改。但是,只是重新运行你正在做的事情有那么麻烦吗?自然,当调用一个方法时——不管它需要多长时间才能完成——我不希望在它完成之前将新编译的代码注入其中。
-
不需要简单地重新运行该过程(这已经需要 5 - 10 分钟),因为该过程本身与数据库的行为不正确,我需要防止它在我添加错误数据时调试它。我的意思是,我也可以在测试代码时删除所有数据库更新。我只是希望有一个更清洁的解决方案
标签: c# asp.net-mvc debugging asp.net-mvc-4 visual-studio-2012