2009-12-25 101 views

回答

5

也许你应该尝试:

  • 停止开发服务器在任务栏中
  • 从释放开关配置调试
+5

奇数,这被标记为答案,但有-2评级... – 2010-07-20 20:59:53

+0

它有一个负评分,因为它是错误的。说你需要进行调试(或者你没有pdb文件)并且你需要在服务器启动时捕获服务器是正确的(因为这是在代码运行的时候),但是你不能附加到过程。你需要一个正在运行的进程来连接调试器,global.asax代码在启动的前几个毫秒内运行,所以它几乎是不可能的(没有使用[正确答案])(https://stackoverflow.com/a/ 4809464/542251))附加到该过程,因为它运行此代码 – Liam 2018-02-28 11:53:24

5

是的,这是正常的。

Application_Start()由IIS处理。

但是所有其他方法,例如Session_Start以及除Application_Start()之外的所有其他方法都可以正常调试。

9

Application_Start()每个AppDomain被调用一次。如果你不打你的断点,这意味着已经创建的AppDomain,所以做到以下几点:

  • 在你的快速启动栏,没有为VS Web服务器的图标(其在其中一个说: “本地主机某个端口”)。右键单击并选择“停止”或“关闭”。这应该杀死AppDomain。
    • 如果您使用的是IIS,则需要手动重新启动您的站点。
    • 或者,修改web config或Global.asax文件通常足以重新启动AppDomain。
  • 重新启动您的调试,您应该现在打你的断点。
7

检查你的web应用程序是在调试模式(<compilation debug="true">在web.config中)。

如果您使用由VS启动的开发人员的IIS,只需重新启动它或重建应用程序即可。

如果你在正常的IIS,你有两个选择:

  1. 对于Web站点配置了发展的文件夹(你VS网络部署项目)的工作,你只需要重新启动应用程序池集对于该网站并在第一次请求到达服务器之前开始调试(您可以在调试过程中始终重新启动应用程序池)。
  2. 对于在另一个文件夹甚至远程服务器上工作的网站,您必须附加到该过程。要做到这一点,您需要远程调试器安装在远程机器上或您自己的(取决于Web服务器位置),并使用Debug - Attach to process菜单,输入计算机名称,然后选择要调试的进程。它通常是以受管模式类型工作的w3wp.exe。
+0

感谢您的答案。我通过VS使用IIS。 – mahdiahmadirad 2009-12-25 19:47:34

82

打破Application_Start()的一个简单方法是使用System.Diagnostics.Debugger类。您可以通过插入System.Diagnostics.Debugger.Break()来强制应用程序中断,您希望调试器中断。

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Break(); 

    // ... 
} 
2

删除global.asax并添加一个新的。在我的解决方案中,有一个global.asax和一个global.asax.cs

所有方法(Session_Start,Application_Start,...)都在bot文件中,但只有global.asax中的方法已经被考虑。所以,cs中的断点和代码不会做任何事情。
只有在重新创建文件后,才有适当的方法并且运行。

+0

我遵循这里的说明:http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html。 基本上,删除global.asax并添加一个全局应用程序类,它可以用一个代码在文件后面重新创建asax,然后我可以进入该文件。我在IIS上运行,它工作正常。 – cbeuker 2012-08-28 18:01:14

53
  1. 将调试器附加到IIS进程。
  2. 打开global.asax文件并放入一个断点。
  3. 给web.config文件添加一个空格并保存文件(这会导致当前的Web应用程序重置);
  4. 刷新/转到网站上的网页。
  5. 当调试器停在你的断点处时惊奇地看着。 :)
+1

这也被称为'触摸web.config',可用于多种场景,当您需要刷新您的网站而不接触IIS时。我不相信它不会发生在我身上。谢谢。 – HockeyJ 2012-10-09 08:16:51

+0

我希望它那么简单。但对我? “电脑说不” – Justin 2015-08-07 01:10:16

3

另一种方法来接受System.Diagnostics.Debugger.Break();

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Launch(); 
    //... 
} 

不应破坏代码,并应甚至开始调试如果服务开始与不同的权限。

+0

这很好我试过了,它也适用于我...谢谢 – 2015-10-16 16:42:35

0

不要指望通过按f5立即调用Application_Start()函数。 Application_Start()仅在第一次请求应用程序时被调用。 奇怪而真实。

0

如果所有的答案不工作的,请尝试:

<compilation debug="true" ... /> 
web.config

。 ;)

相关问题