asp.net-是否可以调试Global.asax?
我无法调试global.asax文件!
我在Application_Start()方法中有一些代码,但是当我在该方法中设置断点时,它将被忽略!
这正常吗?
Mehdi asked 2020-02-09T23:08:37Z
11个解决方案
87 votes
打破Application_Start()的一种简单方法是使用System.Diagnostics.Debugger类。 您可以在希望调试器中断的地方插入System.Diagnostics.Debugger.Break(),以强制应用程序中断。
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Break();
// ...
}
Patrick Lee Scott answered 2020-02-09T23:09:19Z
64 votes
将调试器附加到IIS进程。
打开global.asax文件并放入断点。
在web.config文件中添加一个空格并保存该文件(这将导致当前Web应用程序重置);
刷新/转到网站上的网页。
当调试器在您的断点处停止时,您会感到惊讶。 :)
John Kelly answered 2020-02-09T23:09:57Z
9 votes
每个AppDomain都会调用Application_Start()。 如果您未达到断点,则意味着已经创建了AppDomain,因此请执行以下操作:
在快速启动栏中,有一个VS Web服务器的图标(该图标表示“本地主机某个端口”)。 右键单击并选择“停止”或“关闭”。 这将杀死AppDomain。如果您使用的是IIS,则需要手动重新启动站点。
另外,修改Web配置或Global.asax文件通常足以重启AppDomain。
重新启动调试,您现在应该达到断点。
Juliet answered 2020-02-09T23:10:35Z
7 votes
也许您应该尝试:
在任务栏中停止开发服务器
将配置从发布切换到调试
nandokakimoto answered 2020-02-09T23:08:59Z
7 votes
检查您的Web应用程序是否处于调试模式(web.config中为Debug - Attach to process)。
如果您使用的是由VS启动的开发人员的IIS,只需重新启动它或重建应用程序即可。
如果您使用的是普通IIS,则有两种选择:
对于配置为与开发文件夹(在其中部署了VS Web项目的开发文件夹)一起使用的网站,您只需要重新启动为该网站设置的应用程序池并在第一个请求到达服务器之前就开始调试(您始终可以在调试期间重新启动应用程序池) )。
对于可以在另一个文件夹甚至远程服务器上运行的网站,您必须附加该过程。 为此,您需要在远程计算机上或您自己的计算机上安装远程调试器(取决于Web服务器的位置),并使用Debug - Attach to process菜单,输入计算机名称,然后选择要调试的进程。 通常是在托管模式下工作的w3wp.exe。
terR0Q answered 2020-02-09T23:11:14Z
5 votes
是的,很正常。
Session_Start由IIS处理。
但是所有其他方法(例如Session_Start)和所有其他方法(除了Application_Start())都可以正常调试。
user224564 answered 2020-02-09T23:11:43Z
3 votes
公认的System.Diagnostics.Debugger.Break();的另一种选择是
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Launch();
//...
}
即使服务以不同的权限启动,它也不应破坏代码并应启动调试器。
VladL answered 2020-02-09T23:12:07Z
2 votes
删除Session_Start并添加一个新的。 在我的解决方案中,有一个Application_Start和一个global.asax。
所有方法(Session_Start、Application_Start,...)都已存在于bot文件中,但仅考虑了global.asax中的方法。 因此,cs中的断点和代码不会执行任何操作。
只有在重新创建文件之后,global.asax.cs才具有适当的方法,然后它们才运行。
adonis404 answered 2020-02-09T23:12:37Z
0 votes
不要期望通过按f5立即调用Application_Start()函数。仅在首次向应用程序发出请求时才调用Application_Start()。奇怪但真实。
Kumaresan Lc answered 2020-02-09T23:12:57Z
0 votes
如果所有答案均无效,请尝试:
在web.config.;)
AmirHossein Manian answered 2020-02-09T23:13:21Z
0 votes
对我来说,我的调试断点在附加调试器时已在IIS中执行。 因此,解决方案是用少量空间更改global.asax并保存文件。 刷新后,现在命中了我的断点。
解决方案在这里:[https://wakeupandcode.com/hitting-breakpoints-in-global-asax/]
Hugo A. answered 2020-02-09T23:13:46Z