可以调试Global.asax吗?

Meh*_*hdi 48 asp.net global-asax

我无法调试global.asax文件!

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

这是正常的吗?

Pat*_*ott 88

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

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

     // ...
}
Run Code Online (Sandbox Code Playgroud)


小智 65

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


Jul*_*iet 9

Application_Start()每个AppDomain调用一次.如果您没有访问断点,则表示已创建AppDomain,请执行以下操作:

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


nan*_*oto 7

也许你应该尝试:

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

  • 它的评分为负,因为它是错误的。正确地说您需要处于调试状态(否则您没有 pdb 文件)并且您需要在服务器启动时捕获它(因为这是运行该代码的时间)但您将无法附加到过程。您需要一个正在运行的进程来连接调试器,global.asax 代码在此进程开始的前几毫秒内运行,因此实际上是不可能的(不使用 [下面的正确答案](https://stackoverflow.com/a/) 4809464/542251)) 在运行此代码时附加到进程 (3认同)

ter*_*R0Q 7

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

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

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

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


use*_*564 5

是的,这是正常的.

Application_Start() 由IIS处理.

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