Возможно ли отладить Global.asax? - PullRequest
48 голосов
/ 25 декабря 2009

Я не могу отладить файл global.asax!

У меня есть несколько кодов в методе Application_Start(), но когда я устанавливаю точку останова в методе, она игнорируется!

Это нормально?

Ответы [ 11 ]

87 голосов
/ 26 января 2011

Простой способ взломать Application_Start() - это использовать класс System.Diagnostics.Debugger. Вы можете принудительно завершить работу приложения, вставив System.Diagnostics.Debugger.Break() там, где вы хотите, чтобы отладчик сломался.

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

     // ...
}
64 голосов
/ 12 января 2012
  1. Присоедините отладчик к процессу IIS.
  2. Откройте файл global.asax и установите точку останова.
  3. Добавить пробел в файл web.config и сохранить файл (это приводит к сбросу текущего веб-приложения);
  4. Обновить / перейти на веб-страницу сайта.
  5. с удивлением наблюдайте, когда отладчик останавливается на вашей точке останова. :)
9 голосов
/ 25 декабря 2009

Application_Start() вызывается один раз для каждого домена приложения. Если вы не достигли своей точки останова, это означает, что домен приложений уже был создан, поэтому сделайте следующее:

  • В панели быстрого запуска есть значок для веб-сервера VS (тот, который говорит «Локальный хост какой-то порт»). Щелкните правой кнопкой мыши и выберите «Стоп» или «Закрыть». Это должно убить AppDomain.
    • Если вы используете IIS, вам нужно перезагрузить сайт вручную.
    • В качестве альтернативы, обычно достаточно изменить веб-конфигурацию или файл Global.asax для перезапуска домена приложения.
  • Перезапустите процесс отладки, вы должны достичь своих точек останова.
7 голосов
/ 25 декабря 2009

Убедитесь, что ваше веб-приложение находится в режиме отладки (<compilation debug="true"> в web.config).

Если вы используете IIS разработчика, запущенный VS, просто перезапустите его или пересоберите приложение.

Если вы используете обычный IIS, у вас есть два варианта:

  1. Для веб-сайта, настроенного для работы с папкой разработки (в которой развернут ваш веб-проект VS), вам просто нужно перезапустить пул приложений, настроенный для этого веб-сайта, и начать отладку, прежде чем первый запрос достигнет сервера (вы всегда можете перезапустить приложение пул во время отладки).
  2. Для веб-сайта, который работает в другой папке или даже на удаленном сервере, вы должны присоединиться к процессу. Для этого вам понадобится удаленный отладчик, установленный на удаленном компьютере или самостоятельно (в зависимости от местоположения веб-сервера), и используйте меню Debug - Attach to process, введите имя компьютера, а затем выберите процесс для отладки. Обычно это w3wp.exe, работающий в управляемом режиме.
7 голосов
/ 25 декабря 2009

Может быть, вам стоит попробовать:

  • остановка сервера разработки на панели задач
  • переключение конфигурации с выпуска на отладку
5 голосов
/ 25 декабря 2009

Да, это нормально.

Application_Start() обрабатывается IIS.

Но все другие методы, например Session_Start и все остальные, кроме Application_Start(), можно отлаживать в обычном режиме.

3 голосов
/ 05 декабря 2013

Другой альтернативой принятому System.Diagnostics.Debugger.Break(); будет

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

, который не должен нарушать код и должен запускать отладчик, даже если служба была запущена с другими правами.

2 голосов
/ 12 декабря 2011

Удалите global.asax и добавьте новый. В моем решении были global.asax и global.asax.cs.

Все методы (Session_Start, Application_Start, ...) были в файлах ботов, но были рассмотрены только те, которые в global.asax. Таким образом, точки останова и код в cs ничего не делают.
Только после воссоздания файла у global.asax.cs были соответствующие методы, и они запускались.

0 голосов
/ 10 апреля 2019

Для меня моя точка останова отладки уже выполнена в IIS к тому времени, когда отладчик подключен. Таким образом, решение было изменить global.asax с небольшим пространством и сохранить файл. После обновления моя точка останова теперь достигнута.

Решение здесь: https://wakeupandcode.com/hitting-breakpoints-in-global-asax/

0 голосов
/ 29 декабря 2016

Если все ответы не работают, попробуйте:

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

в web.config. ;)

...