【发布时间】:2010-12-29 23:02:08
【问题描述】:
我无法调试 global.asax 文件!
我在Application_Start() 方法中有一些代码,但是当我在方法中设置断点时,它被忽略了!
这正常吗?
【问题讨论】:
标签: asp.net global-asax
我无法调试 global.asax 文件!
我在Application_Start() 方法中有一些代码,但是当我在方法中设置断点时,它被忽略了!
这正常吗?
【问题讨论】:
标签: asp.net global-asax
破解Application_Start() 的简单方法是使用System.Diagnostics.Debugger 类。您可以通过在您希望调试器中断的位置插入 System.Diagnostics.Debugger.Break() 来强制中断应用程序。
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Break();
// ...
}
【讨论】:
【讨论】:
Application_Start() 每个 AppDomain 调用一次。如果您没有遇到断点,则意味着 AppDomain 已经创建,请执行以下操作:
【讨论】:
检查您的 Web 应用程序是否处于调试模式(web.config 中的<compilation debug="true">)。
如果你使用的是VS启动的开发者IIS,重启或者重建应用即可。
如果您使用的是普通 IIS,您有两种选择:
Debug - Attach to process 菜单,输入计算机名称,然后选择要调试的进程。它通常是在托管模式类型下工作的 w3wp.exe。【讨论】:
也许你应该试试:
【讨论】:
是的,这很正常。
Application_Start() 由 IIS 处理。
但是所有其他方法,例如Session_Start,以及除Application_Start()之外的所有其他方法都可以正常调试。
【讨论】:
公认的System.Diagnostics.Debugger.Break(); 的另一种选择是
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Launch();
//...
}
它不应该破坏代码并且应该启动调试器,即使服务是以不同的权限启动的。
【讨论】:
删除global.asax 并添加一个新的。在我的解决方案中,有一个global.asax 和一个global.asax.cs。
所有方法(Session_Start、Application_Start、...)都已在 bot 文件中,但仅考虑了 global.asax 中的方法。因此,cs 中的断点和代码不会做任何事情。
只有在重新创建文件后,global.asax.cs 才有适当的方法并运行。
【讨论】:
对我来说,在附加调试器时,我的调试断点已经在 IIS 中执行。所以解决方案是用一点空间改变 global.asax 并保存文件。刷新后,我的断点现在被命中了。
这里的解决方案: https://wakeupandcode.com/hitting-breakpoints-in-global-asax/
【讨论】:
Application 标签内添加一个空格,点击保存,然后刷新浏览器。
不要期望通过按 f5 立即调用 Application_Start() 函数。 Application_Start() 仅在第一次向应用程序发出请求时调用。 奇怪但真实。
【讨论】:
如果所有答案都不起作用,请尝试:
<compilation debug="true" ... />
在web.config。 ;)
【讨论】: