我在.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 callback,object state,bool preserveSyncCtx)+ 0x285 bytes mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state,bool preserveSyncCtx)+ 0x9 bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+ 0x6f bytes mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()+ 0x1ea bytes
[原产于管理过渡]
[Appdomain Transition]
[原生于管理过渡]
答案 0 :(得分:1)
如果您打开了“Break on All Exceptions”,那么一旦启动调试器,当抛出异常时,您将能够查看并导航堆栈跟踪。这应该可以让您了解代码导致异常的路径。您还可以询问异常以检查是否已设置InnerException
属性。根据该信息,您应该能够确定导致问题的原因。如果没有从您收集的信息中发布更多详细信息,您可以获得更多帮助。
设置Visual Studio以打破所有异常的说明:http://msdn.microsoft.com/en-us/library/d14azbfh.aspx
答案 1 :(得分:0)
在FM库中,在异步回调中抛出异常时使用AsyncException.AsyncThrow
。尝试将您的FM回调代码包装在try / catch块中以捕获异常,例如:
client.Connect(new ConnectArgs
{
OnSuccess = (e) =>
{
try
{
// your code
}
catch (Exception ex)
{
// handle exception
}
}
});
如果你没有将你的回调代码包装在try / catch块中,那么FM库会将异常推送到一个线程,在那里它会大声失败而不是吞下/隐藏它。