【问题标题】:How to debug "Safe handle has been closed" error如何调试“安全句柄已关闭”错误
【发布时间】:2009-10-26 14:18:04
【问题描述】:

我继承的代码不断崩溃,并出现以下错误(根本没有改变):

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 对话框(带有继续选项和堆栈跟踪)。

我查过了,和Thread.Abort没有关系

我如何尝试从堆栈跟踪中找到导致此问题的原因,而不是在应用程序的代码中?

【问题讨论】:

    标签: .net debugging exception


    【解决方案1】:

    从 System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent() 和 Microsoft.Win32.UnsafeNativeMethods 的事实来看,我会冒险您有一个 COM 组件,它具有访问端口的内部线程,例如用于串行或 TCP/IP 数据。

    看起来线程在它的启动序列中抛出了一个异常。可能它正在尝试访问不可用或不存在的端口。这失败了,异常没有被处理,因此通过代码传播回来。

    尝试从 UnhandledException 事件中记录更多信息,以便了解这可能从哪里开始。

    【讨论】:

    • 这很有魅力。我删除了所有连接的 USB 设备,除了我的鼠标,它工作正常。不知道为什么会这样。
    猜你喜欢
    • 2021-11-02
    • 2014-01-09
    • 2014-12-15
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多