2009-07-31 4 views
8

У меня есть служба Windows, которая имеет ряд потоков, которые выполняют некоторую работу. Все прошло хорошо в тестировании до тех пор, пока я не увидел, что «служба Windows неожиданно прекратилась» в средстве просмотра событий.Служба Windows неожиданно завершена

Как я могу попытаться отладить, где это происходит? У меня есть исключения, которые попадают под нормальные обстоятельства, но не в этом случае.

Я не знаю с чего начать.

JD.

+1

Вы используете неуправляемые библиотеки? –

ответ

6

Поместите вызов System.Diagnostics.Debugger.Break() в вашем OnStart() обратного вызова. Когда ваша служба запустится, вам будет предложено запустить отладчик Visual Studio. Как только отладчик открывается, вы можете отлаживать оттуда.

+0

Проблема, с которой я столкнулся, - это служба Windows, и я не могу ее воспроизвести. Как отладка поможет? Где-то бросается необработанное исключение. У меня есть try/excepts в моем коде, но ясно, что исключение не поймано. –

+1

Если служба, по крайней мере, превращает ее в ваш обратный вызов OnStart(), тогда поместите вызов в Debugger.Break(), как я уже сказал. Как только отладчик всплывает и останавливается в точке останова, зайдите в меню «Отладка» и выберите опцию «Исключения». Установите флажок в столбце «Бросок» для «Исключения времени обычного языка». Когда вы продолжаете сеанс отладки, отладчик будет разбит, где исключение составляет , заброшенное, в отличие от того, где оно было обнаружено. –

+0

Вы можете даже поместить вызов Debugger.Break() в функцию точки входа для вашей службы, что еще раньше в процессе запуска (очевидно), чем обратный вызов OnStart(). Сделайте это, если вы никогда не попадете в ваш обратный вызов OnStart(). –

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