我正在调试和增强一个C#/ XAML程序,它在运行时反复生成异常,我可以看到它在Output窗口中看到。
类型' System.ObjectDisposedException'的第一次机会异常发生在System.dll
中类型' System.ObjectDisposedException'的第一次机会异常发生在System.dll
中(由于某种原因,它们似乎成对出现)程序本身在异常发生后继续运行。
该程序由一些XAML / C#代码隐藏组成,它构成.Net DLL中调用库的前端和测试工具,这也是我们的C#代码的一部分。
总代码库(前端和DLL)是大约100K行的C#源代码代码,分布在大约25个文件中。它主要在一个线程中运行,除了在socket数据处理程序中运行的代码,当数据从外部硬件设备到达时,系统调用该代码(该程序运行工厂制造过程)。
如何缩小/追踪我的代码中的哪个或哪些内容会触发这些异常?
答案 0 :(得分:4)
在Visual Studio中,您可以在抛出异常时中断执行。转到调试菜单 - >例外 - >公共语言运行时异常 - >系统 - > System.ObjectDisposedException并选中“Thrown”复选框。
答案 1 :(得分:2)
此异常表示尝试在.Dispose()
-ed之后访问对象。程序继续运行的原因是处理异常。抛出异常时始终会生成First-Chance异常,即使它是使用catch
语句处理的。
一般来说,许多这样的第一次机会异常都不值得担心。如果要跟踪它们,则需要附加第一次机会异常处理程序,然后使用StackTrace
属性来查找它们。假设您的Main
函数位于Program
,则以下代码应该可以正常工作
static Program()
{
AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
{ // Breakpoint here
};
}
这样,您就可以通过e.Exception