2009-12-25 3 views

ответ

5

Может быть, вы должны попробовать:

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

Странно, что это было отмечено как ответ, но имеет рейтинг -2 ... –

+0

У этого есть минус-рейтинг, потому что это неправильно. Правильно сказать, что вам нужно отлаживать (или у вас нет файлов pdb), и вам нужно захватить сервер при его запуске (потому что это когда этот код запущен), но вы не сможете для присоединения к процессу. Для присоединения отладчика вам нужно выполнить процесс, код global.asax запускается за первые несколько секунд этого процесса, поэтому это практически невозможно (без использования [правильного ответа ниже] (https://stackoverflow.com/a/ 4809464/542251)) для присоединения к процессу при выполнении этого кода – Liam

5

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

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

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

9

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

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

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

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

Если вы на обычном IIS у вас есть два варианта:

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

благодарю вас за ответ. Я использую IIS через VS. – mahdiahmadirad

82

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

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

    // ... 
} 
2

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

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

+0

Я выполнил следующие инструкции: http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html. В принципе, удалите global.asax и добавьте глобальный класс приложения, который воссоздает asax с кодом за файлом, который затем я могу выполнить. Я работаю на IIS, и он работает нормально. – cbeuker

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

Это также называется «Прикосновение к web.config» и может использоваться для нескольких сценариев, когда вам нужно обновить свой сайт, не касаясь IIS. Не могу поверить, что это не произошло со мной. Благодарю. – HockeyJ

+0

Хотелось бы, чтобы все было так просто. Но для меня? «компьютер говорит« нет » – Justin

3

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

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

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

+0

это хорошо, я попробовал, и это сработало для меня тоже ... спасибо –

0

Не ожидайте немедленного вызова функции Application_Start() нажатием f5. Application_Start() вызывается только во время первого запроса к приложению. Странно, но это правда.

0

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

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

в web.config. ;)

Смежные вопросы