Как отладить исчезающее приложение - PullRequest
4 голосов
/ 06 ноября 2008

На сервере Windows 2003 у меня есть чистое приложение .NET 3.5 C# (без неуправляемого кода). Он подключается к различным другим удаленным системам через сокеты и действует как концентратор данных. Он работает без проблем 10-15 часов, но время от времени просто исчезает. Если я смотрю приложение с помощью диспетчера задач, использование памяти остается постоянным.

В функции Main() я обертываю вызов остальной части приложения в блок try .. catch, который он только что прошел, - блок catch, который записывает исключение в файл, игнорируется. Если я вручную создаю исключение для тестирования, вызывается блок catch.

До ввода try .. catch я делаю:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);

В системе установлен доктор Ватсон, но в каталоге ничего не написано DRWTSN32.EXE указывает на.

Как я могу поймать любое исключение, вызывающее это?

Ответы [ 5 ]

7 голосов
/ 06 ноября 2008

Попробуйте использовать средства отладки от Microsoft. Вы можете скачать их с здесь .

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

adplus -crash -pn your.exe -quiet

В этом блоге 1010 *.

содержится много полезной информации об отладке в Windows
3 голосов
/ 06 ноября 2008

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

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

Если это консольное приложение, то я немного озадачен.

РЕДАКТИРОВАТЬ : Ваш комментарий говорит, что это приложение Windows Forms. В этом случае вы, вероятно, не видите исключение, поскольку оно обрабатывается встроенным обработчиком исключений Windows Forms, который по умолчанию выполняет следующие действия:

  • Поймает необработанное управляемое исключение, когда:
    • без отладчика и
    • исключение возникает при обработке сообщения окна, а
    • jitDebugging = false в App.Config.
  • Показывает диалог для пользователя и предотвращает завершение работы приложения.

Вы можете отключить это поведение, установив jitDebugging = true в App.Config. Тогда вы сможете увидеть необработанное исключение, зарегистрировавшись для события Application.ThreadException, например, в C #:

Application.ThreadException += new Threading.ThreadExceptionHandler(CatchExceptions);
1 голос
/ 07 ноября 2008

Может быть след приложения в EventLog.

У меня исчезло приложение .Net без возможности отловить исключение. Каждый раз, когда это происходило, в EventLog была запись.

Для просмотра журнала событий просто введите EventVwr в командной строке или запустите окно.

1 голос
/ 06 ноября 2008

Вы также можете присоединить WinDBG при запуске и включить точки останова для исключений .NET. Затем вы можете сделать !printexception, чтобы увидеть, что происходит.

0 голосов
/ 06 ноября 2008

Если это приложение Windows Forms, вы можете попробовать Application.ThreadException.

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