2012-07-31 4 views
-1

пользователей сообщили, что они выходят из своего приложения без каких-либо ошибок, у меня есть много этих ошибок в окне просмотра событий:Пользователи выход из vb.net приложения без каких-либо исключений

EventType clr20r3, P1 main.exe, P2 1.0.0.0, P3 4f6b05ad, P4 system.drawing, P5 2.0.0.0, P6 4333aeaf, P7 17e, P8 20, P9 system.argumentexception, P10 NIL.

EventType clr20r3, Р1 main.exe, Р2 1.0.0.0, Р3 4f6b05ad, Р4 Microsoft.VisualBasic, Р5 8.0.0.0, Р6 4333d6d8, Р7 5e, Р8 1e1, Р9 34ssps20bdj3nj0wmit5kamzhvglfzcc, Р10 NIL.

EventType clr20r3, Р1 main.exe, Р2 1.0.0.0, Р3 4f6b05ad, Р4 Microsoft.VisualBasic, Р5 8.0.0.0, Р6 4333d6d8, Р7 85, Р8 а2, Р9 system.componentmodel.win32, P10 NIL.

У нас есть сервер терминалов в Windows Server 2003, и у меня около 500 ошибок за один день, как указано выше.

Любое предложение?

ответ

2

Похоже, вы получаете некоторые необработанные исключения. Если .NET-приложение встречает исключение, которое не попадает в блок Try/Catch, и отлаживатель не отображает его, приложение прекратится.

Добавить обработку исключений и протоколирование в приложение, чтобы вы могли видеть все детали исключения. Я рекомендую использовать метод объекта ToString объекта исключения при его отображении или входе в систему, поскольку он отображает исключение, сообщение и трассировку стека для исключения и всех его внутренних исключений. После того, как у вас есть эта информация, должно быть проще определить, что происходит, и как ее исправить.

Чтобы добавить обработку исключений, если вы используете инфраструктуру приложения VB, перейдите на вкладку «Приложение» на странице свойств проекта и нажмите кнопку «Просмотреть приложения». В MyApplication классе, добавить обработчик событий для UnhandledException события, такие как:

Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 
    MyLog.WriteEntry(e.Exception.ToString()) 
End Sub 

Если, однако, вы не используете рамки приложения, перейдите к точке входа Метиону вашего приложения (Sub Main) и положить Try/Поймать блок вокруг всего кода в этом методе, например:

Public Sub Main 
    Try 
     ' ... 
    Catch ex As Exception 
     MyLog.WriteEntry(ex.ToString()) 
    End Try 
End Sub 

Эти примеры предполагают, что у вас есть MyLog класс с общим WriteEntry методом. Очевидно, вам нужно будет реализовать свой собственный журнал в таком классе.

+0

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

+0

@CodyGray Под «необработанным крючком исключения» вы ссылаетесь на событие «MyApplication.UnhandledException»? –

+0

Да, это тот. Это лучший способ регистрировать ошибки для целей отладки. Обертывание всего в пустом блоке catch просто скрывает ошибку, и надеясь оправиться от любых неизвестных исключений безответственно оптимистично.Я обсуждал это раньше [здесь] (http://stackoverflow.com/a/4827646/366904). –