Как отладить ошибку «Безопасный дескриптор закрыт» - PullRequest
11 голосов
/ 26 октября 2009

Код, который я унаследовал, довольно сильно падает со следующей ошибкой (не измененной вообще):

System.ObjectDisposedException: Safe handle has been closed
   at Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(
          SafeFileHandle hFile, NativeOverlapped* lpOverlapped, 
          Int32& lpNumberOfBytesTransferred, Boolean bWait)
   at System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.
          ExecuteCodeWithGuaranteedCleanup(
          TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(
          ExecutionContext executionContext, ContextCallback callback, 
          Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, 
          ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

Это происходит только после того, как предыдущие разработчики добавили событие AppDomain.UnhandledException .

Если я удаляю его, приложение просто вылетает с сообщением доктора Уотсона (отправить отзыв и т. Д.), А не с обычным диалоговым окном .NET (с опцией продолжения и трассировкой стека).

Я проверил и не связан с Тема. Аборт

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

1 Ответ

9 голосов
/ 26 октября 2009

Из-за того, что упоминаются System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent () и Microsoft.Win32.UnsafeNativeMethods, я рискую иметь компонент COM, который имеет внутренние потоки, обращающиеся к порту, например для последовательных или TCP / IP данных.

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

Попытка записи дополнительной информации из события UnhandledException, чтобы получить представление о том, откуда это может начаться.

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