我怎么知道我的代码中有什么触发了这个'系统.对象处置异常

本文关键字:系统 对象 异常 代码 我的 什么 我怎么知道 | 更新日期: 2023-09-27 18:30:38

我正在调试和增强一个 C#/XAML 程序,该程序在运行时反复生成异常,我可以在"输出"窗口中看到该异常。

系统中发生了类型为"System.ObjectDisposedException"的第一次机会异常.dll

系统中发生了类型为"System.ObjectDisposedException"的第一次机会异常.dll

(由于某种原因,它们似乎成对发生)程序本身在异常发生后继续运行。

该程序由一些 XAML/C# 代码隐藏组成,这些代码隐藏构成了 .Net DLL 中调用库的前端和测试工具,这也是 C# 代码的一部分。
总代码库(前端和 DLL)是大约 100K 行 C# 源代码,分布在大约 25 个文件中。 它主要在一个线程中运行,除了在套接字数据处理程序中运行的代码,当数据从外部硬件设备到达时,系统会调用这些处理程序(该程序运行工厂制造过程)。

如何缩小/跟踪代码中触发这些异常的位置或内容?

我怎么知道我的代码中有什么触发了这个'系统.对象处置异常

在Visual Studio中,当引发异常时,你可以中断执行。转到调试菜单 -> 异常 -> 公共语言运行时异常 ->系统 -> System.ObjectDisposedException,然后选中"抛出"复选框。

此异常表示在对象被.Dispose() -ed 后试图访问该对象。程序继续运行的原因是处理了异常。引发异常时始终会生成 First-Chance 异常,即使使用 catch 语句处理异常也是如此。

一般来说,许多像这样的第一次机会例外是不用担心的。如果要跟踪它们,则需要附加第一次机会异常处理程序,然后使用 StackTrace 属性查找它们。假设您的Main函数在Program中,以下代码应该可以工作

static Program()
{
    AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
    { // Breakpoint here
    };
}

这将使您能够通过e.Exception访问异常