Отслеживание ошибки переполнения стека в службе Windows - PullRequest
7 голосов
/ 28 августа 2011

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

Описание: Процесс был прерван из-за переполнения стека.

Поэтому я вернулсястарая версия и запустил ее, и я все еще получаю ошибку переполнения стека.

Хуже всего то, что я отладил оба, и я не получаю эту ошибку, чтобы повторить.Как / как лучше всего найти причину переполнения для службы Windows?

Ответы [ 2 ]

7 голосов
/ 28 августа 2011

Вы можете подписаться на AppDomain.UnhandledException , чтобы зарегистрировать исключение.Другой вариант - посмотреть, генерируется ли аварийный дамп при сбое службы, и использовать WinDbg , чтобы отследить проблему.Вы также можете настроить windows для генерации этих дампов.WinDbg поставляется со скриптом, который может подключаться к процессу и генерировать дамп при сбое этого процесса.

Из этой статьи :

... и найти StackOverflowException не так уж и сложно.Если вы запустите! Clrstack и обнаружите стек вызовов более 200 строк, вы можете быть более или менее уверены, что это ваша проблема.

ОБНОВЛЕНИЕ:

Если вы используете .NET 4.0,необходимо добавить элемент legacyCorruptedStateExceptionsPolicy в файл конфигурации службы, чтобы зарегистрировать исключение в AppDomain.UnhandledException.

3 голосов
/ 28 августа 2011

Не зная больше о конкретной проблеме, я могу сказать, что StackOverflowException (или его собственный эквивалент) вызван неограниченной рекурсией в 99% случаев. Проверьте свой код; убедитесь, что все рекурсивные случаи, о которых вы знаете, имеют правильный конечный случай, и убедитесь, что вы не делаете глупостей, таких как рекурсивный вызов метода доступа или мутатора, когда вы хотите получить доступ к полю:

private int something;

public int Something
{
    get
    {
        return Something; // return something;
    }

    set
    {
        Something = value; // something = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...