【发布时间】:2012-06-08 21:00:47
【问题描述】:
我们有一个运行在 WPF 和实体框架之上的大型业务应用程序。问题是我们在过去 2 周内遇到了问题,无法确定问题的根源。
异常被 DispatcherUnhandledException 捕获,我们从异常中获得的信息(通过电子邮件)如下:
mscorlib: Value cannot be null.
at System.Threading.Monitor.ReliableEnter(Object obj, Boolean& lockTaken)
at System.Threading.Monitor.Enter(Object obj, Boolean& lockTaken)
at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
at System.Data.EntityClient.EntityConnection.Dispose(Boolean disposing)
at System.ComponentModel.Component.Finalize()
该异常每天“随机”抛出 4 或 5 次,并且仅来自我们拥有的 20 多个用户中的一个。我们无法弄清楚问题!堆栈跟踪没有提供太多信息,我们无法重现问题。
我假设这发生在一个线程上,但我无法识别导致异常的线程,因为我们有很多 BackgroundWorkers 和异步的东西!
那么,如何获得有关异常的更多信息?
编辑:
没有任何 InnerExceptions。
此外,异常会以几分钟和几小时的间隔抛出,例如:11:41、11:46、11:51 然后它运行良好,直到 18:03、18:07、18:11 然后没有抛出异常。该分钟间隔发生的时刻也是随机的,与服务器或网络上的任何负载无关。
【问题讨论】:
-
是否有未通过电子邮件发送的
InnerException? -
不,所有捕获的异常都将与它们的 InnerExceptions(如果有)一起发送。
-
您的代码中可能存在异常,该异常被框架中的某些回调隐藏。尝试添加记录异常然后抛出的 catch 子句;它们回到与 WPF 的接触点(例如,在 VM 设置器中,在命令实现中)。此外,如果可能,向该客户端发送匹配的 PDB 并尝试远程调试(使用 Visual Studio 远程调试器)。
-
您只是通过电子邮件或完整的故障转储获取异常文本吗?后一种情况,将故障转储加载到WinDbg中,加载SOS,执行命令
!pe;这将向您显示带有任何内部异常的异常。如果您没有崩溃转储,请让您的客户发送给您。
标签: c# wpf entity-framework exception