FM.dll 中发生 System.Exception 类型的未处理异常

Posted

技术标签:

【中文标题】FM.dll 中发生 System.Exception 类型的未处理异常【英文标题】:Unhandled exception of type System.Exception occurred in FM.dll 【发布时间】:2014-01-31 22:12:42 【问题描述】:

我在 .NET 应用程序中使用 WebSync,其中客户端正在调用连接、订阅等 WebSync。在代码执行的某个地方(它是一个大应用程序),我得到一个灰色框弹出窗口,上面写着上面的错误消息。因为这是一个大应用程序,我如何才能找到应用程序中发生这种情况的位置?问题是这个应用程序有很多线程。

此消息是否意味着 FM.dll (WebSync) 中存在问题,或者是否意味着我的代码中缺少一些应该捕获此异常的内容。如果是后者,我如何在我的代码中找到可能发生这种情况的位置?

谢谢!

这是我的错误的调用堆栈。如何判断这是我的错误还是问题出在 FM.dll (WebSync) 内部?

FM.dll!FM.AsyncException.AsyncThrow.AnonymousMethod__0(对象未使用)+ 0x47 字节 mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback 回调, 对象状态, bool preserveSyncCtx) + 0x285 字节 mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback 回调, 对象状态, bool preserveSyncCtx) + 0x9 bytes mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x6f 字节 mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x1ea 字节 [本机到托管转换] [Appdomain 转换] [本机到托管转换]

【问题讨论】:

您是否尝试过调试应用程序?我认为我们这里没有足够的信息来帮助您。 我尝试了调试,但当我按 F5 继续时我感到困惑,我注意到其他线程开始发挥作用。很难最终到达发生上述错误的地步。我尝试了乔希的建议。我将发布调用堆栈。 【参考方案1】:

如果您打开了“中断所有异常”,那么一旦您启动调试器,当抛出异常时,您将能够查看和导航堆栈跟踪。这应该让您了解代码导致异常的路径。您还可以询问异常以检查是否已设置 InnerException 属性。根据这些信息,您应该能够确定导致问题的原因。如果不从您收集的信息中发布更多详细信息,您可以获得更多帮助。

设置 Visual Studio 以中断所有异常的说明:http://msdn.microsoft.com/en-us/library/d14azbfh.aspx

【讨论】:

我添加了调用堆栈,但没有我的代码出现在其中。不过里面有一些过渡。 过渡是什么意思? 如果你看一下我添加的调用堆栈,有几行说 Native to Managed Transition。 我已经出城了,雷,抱歉耽搁了。看起来问题出在 FM.dll 内部。最简单的解决方案是获取 FM.dll 的源项目,将其包含在您的开发项目中,然后从那里进行调试。这样您就可以在导致异常的确切行上中断。【参考方案2】:

在 FM 库中,AsyncException.AsyncThrow 在异步回调中引发异常时使用。尝试将 FM 回调代码包装在 try/catch 块中以捕获异常,例如:

client.Connect(new ConnectArgs

    OnSuccess = (e) =>
    
        try
        
            // your code
        
        catch (Exception ex)
        
            // handle exception
        
    
);

如果您不将回调代码包装在 try/catch 块中,则 FM 库会将异常推送到一个线程,在那里它将大声失败而不是吞下/隐藏它。

【讨论】:

以上是关于FM.dll 中发生 System.Exception 类型的未处理异常的主要内容,如果未能解决你的问题,请参考以下文章

加载 dll 基地址 HMODULE 的 QT 问题

VC++中使用SOAP发生错误~

RAFT:当Leader在操作过程中发生变化时会发生啥

《Go 编程语言》一书中的死锁,它是如何发生的以及为啥会发生?

Image.Save()发生“GDI+ 中发生一般性错误”

持续发生的 mscorlib.dll 中发生 System.Threading.ThreadAbortException