可以调试Global.asax吗?

时间:2009-12-25 06:46:34

标签: asp.net global-asax

我无法调试global.asax文件!

我在Application_Start()方法中有一些代码,但是当我在方法中设置断点时,它会被忽略!

这是正常的吗?

11 个答案:

答案 0 :(得分:87)

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

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

     // ...
}

答案 1 :(得分:64)

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

答案 2 :(得分:9)

每个AppDomain调用一次

Application_Start()。如果您没有访问断点,则表示已创建AppDomain,请执行以下操作:

  • 在快速启动栏中,有一个VS Web服务器的图标(其中显示的是“Local Host Some Port”)。右键单击并选择“停止”或“关闭”。这应该会杀死AppDomain。
    • 如果您使用的是IIS,则需要手动重新启动站点。
    • 或者,修改web配置或Global.asax文件通常足以重启AppDomain。
  • 重新开始调试,你应该立即点击你的断点。

答案 3 :(得分:7)

也许你应该尝试:

  • 在任务栏中停止开发服务器
  • 将配置从发布切换到调试

答案 4 :(得分:7)

检查您的Web应用程序是否处于调试模式(web.config中为<compilation debug="true">)。

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

如果您使用普通IIS,则有两种选择:

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

答案 5 :(得分:5)

是的,这很正常。

Application_Start()由IIS处理。

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

答案 6 :(得分:3)

接受的System.Diagnostics.Debugger.Break();的另一种替代方法是

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

不应该破坏代码,即使服务以不同的权限启动,也应该启动调试器。

答案 7 :(得分:2)

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

所有方法(Application_Startglobal.asax,...)都在机器人文件中,但只考虑了global.asax.cs中的方法。因此,cs中的断点和代码不会做任何事情 只有在重新创建文件后,{{1}}才有适当的方法并运行。

答案 8 :(得分:0)

不要指望按f5立即调用Application_Start()函数。 仅在首次请求应用程序时调用Application_Start()。 奇怪但真实。

答案 9 :(得分:0)

如果所有答案都不起作用,请尝试:

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

。 ;)

答案 10 :(得分:0)

对我来说,在连接调试器时,我的调试断点已在IIS中执行。因此解决方案是用少量空间更改global.asax并保存文件。刷新后,我的断点被击中。

解决方案在这里: https://wakeupandcode.com/hitting-breakpoints-in-global-asax/