Поиск исключений переполнения стека в службе Windows - PullRequest
4 голосов
/ 18 сентября 2010

Я унаследовал большой и сложный проект службы Windows C #, который время от времени дает сбой.Система ведения журналов не регистрирует сообщения, которые я первоначально считал странными, но теперь я понимаю, что ведение журнала может завершиться сбоем, если произойдет переполнение стека или исключение нехватки памяти.

Итак, одна из задач, которые у меня есть, - этопопробуйте найти любые рекурсивные функции, которые могут уничтожить стек.Существуют ли какие-либо инструменты в VS2010 или другом программном обеспечении для анализа кода, которые помогли бы обнаружить рекурсивный код?

В качестве второго вопроса: что еще может вызвать сбой ведения журнала в службе Windows?

(Project используетVS2010, но все еще ориентирован на .net 3.5 с C # 3.0)

Ответы [ 2 ]

3 голосов
/ 18 сентября 2010

Загрузка Инструмент диагностики отладки , укажите его в своей службе, добавьте переполнение стека в списки исключений и дайте ему поработать. Когда служба перестает работать, она сбрасывает память. Откройте дамп в Visual Studio и проверьте все стеки во всех потоках, чтобы выявить оскорбительный код. Вам могут понадобиться оригинальные символы отладки для вашего сервиса, чтобы получить понятную информацию.

Подробнее об отладке дампов памяти с VS2010 здесь . Подробнее об устранении подобных проблем с часами Tess Ferrandez this

Обновление: Учебное пособие об исключении переполнения стека с подробностями. Он основан на веб-приложении в IIS, но вы легко можете применить ту же технику к сервису, но это просто способ получить дамп памяти, который отличается.

НТН

1 голос
/ 18 сентября 2010

Вы присоединяетесь к событию AppDomain.UnHandledException ?Это должно вызвать событие, если происходит необработанное исключение.Кроме того, вы проверили журнал событий?

Очень трудно попытаться угадать, что может вызвать сбой вашего сервиса.Если вы присоединены к событию, которое я упомянул, то, я думаю, это может быть только одно из немногих событий, исключение StackOverflow.Если вы не присоединяетесь к этому событию, это может быть что угодно.

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

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