Dot-Net
如何調試“安全句柄已關閉”錯誤
我繼承的程式碼不斷崩潰,並出現以下錯誤(根本沒有改變):
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 Event時才被擷取。
如果我刪除它,應用程序只會崩潰並顯示 Dr Watson 消息(發送回饋等),而不是通常的 .NET 對話框(使用 continue 選項和堆棧跟踪)。
我已經檢查過,它與Thread.Abort無關
我如何嘗試從堆棧跟踪中找到此問題的原因,而不是在應用程序的程式碼中?
從 System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent() 和 Microsoft.Win32.UnsafeNativeMethods 的事實來看,我會冒著風險,您有一個 COM 組件,該組件具有內部執行緒訪問埠,例如串列或 TCP/IP 數據.
看起來執行緒在其啟動序列期間拋出異常。可能它正在嘗試訪問不可用或不存在的埠。這失敗了,異常沒有被處理,因此通過程式碼傳播回來。
嘗試從 UnhandledException 事件中記錄更多資訊,以便了解這可能從哪裡開始。