C# C/WPF应用程序抛出ObjectDisposedException;为什么我不能捕捉或获取堆栈跟踪?

C# C/WPF应用程序抛出ObjectDisposedException;为什么我不能捕捉或获取堆栈跟踪?,c#,wpf,stack-trace,objectdisposedexception,C#,Wpf,Stack Trace,Objectdisposedexception,我有一个C WPF UI应用程序,当我关闭它时,总是会出现一个windows应用程序崩溃对话框UIDemo遇到问题,需要关闭 错误报告表明这是System.ObjectDisposedException,它表示在某个地方正在对已处置对象调用方法。没关系,我明白那部分 我很想把它修好。我就是找不到那个混蛋的踪迹 该例外情况回避了以下所有情况: 我的DispatcherUnandledException处理程序 我的try/catch包含退出事件处理程序的全部内容 在windows应用程序崩溃对话框

我有一个C WPF UI应用程序,当我关闭它时,总是会出现一个windows应用程序崩溃对话框UIDemo遇到问题,需要关闭

错误报告表明这是System.ObjectDisposedException,它表示在某个地方正在对已处置对象调用方法。没关系,我明白那部分

我很想把它修好。我就是找不到那个混蛋的踪迹

该例外情况回避了以下所有情况:

我的DispatcherUnandledException处理程序 我的try/catch包含退出事件处理程序的全部内容 在windows应用程序崩溃对话框中单击“调试”将关闭该对话框,而不执行任何操作 在VisualStudio的调试模式下运行应用程序似乎可以工作,但奇怪的是,它似乎没有以这种方式崩溃,因此没有任何跟踪 我所要做的就是Windows发送给MS的错误报告的神秘内容。这些十六进制内存转储实际上并没有那么有用


有人知道我怎样才能得到那个该死的跟踪吗?

试着在主方法中放置一个Try/catch,而不是在退出处理程序周围。在WPF中,main方法并不总是很容易找到的——请参阅此处了解如何找到它:

尝试将Try/catch放在主方法内部,而不是放在退出处理程序周围。在WPF中,主要方法并不总是很容易找到-请参见此处了解如何找到它:

另一个选项是调试Diag以捕获特定异常并生成崩溃转储,该转储可通过psscor2或SOS在WinDbg中进行分析。这将允许您评估堆栈跟踪

调试诊断:


使用WinDbg调试CLR:

另一个选项是调试Diag以捕获特定异常并生成崩溃转储,该转储可通过psscor2或SOS在WinDbg中进行分析。这将允许您评估堆栈跟踪

调试诊断:


使用WinDbg调试CLR:

控制台窗口将显示所有抛出的异常以及完整堆栈跟踪。要向WPF应用程序添加控制台窗口,请执行以下操作:

转到WPF应用程序的项目属性。 选择第一个侧面-选项卡,应用程序。 在输出类型下,选择Console应用程序。 构建并运行你的应用程序。它应该通过一个额外的控制台窗口启动。当它崩溃时,您应该在其中看到异常和堆栈跟踪。
控制台窗口将显示带有完整堆栈跟踪的任何异常。要向WPF应用程序添加控制台窗口,请执行以下操作:

转到WPF应用程序的项目属性。 选择第一个侧面-选项卡,应用程序。 在输出类型下,选择Console应用程序。 构建并运行你的应用程序。它应该通过一个额外的控制台窗口启动。当它崩溃时,您应该在其中看到异常和堆栈跟踪。
您是否在VS中启用了异常处理?我按照建议再次在调试模式下运行它,但它仍然没有捕获它。不过建议不错。为AppDomain.CurrentDomain.UnhandledException编写一个事件处理程序。您在VS中启用了异常处理吗?我按照建议再次在调试模式下运行了它,但它仍然没有捕获到它。不过,这是一个很好的建议。为AppDomain.CurrentDomain.UnhandledExceptionI编写一个事件处理程序我更改了main方法以添加try/catch,但它仍然没有被捕获。我在那里放了一个log语句,所以我100%确定我的添加没有被代码生成器破坏。不过谢谢,你的链接提供了信息。在这种情况下,异常几乎肯定是由后台线程引发的。你有穿线吗?没有。我的意思是,我在做WPF,所以有一定数量的UI线程隐式发生,但我还没有做任何花哨的事情。看起来非常可疑,特别是考虑到错误没有发生在调试器中。我不是想猜测你,但是你确定你在调试器中运行的二进制文件与在调试器中运行的二进制文件相同吗?尝试执行Build->Clean,然后从IDE外部运行它。如果它仍然有效,那么您就不是在同一个地方跑步。另外,请检查您的构建配置-您可能正在调试调试版本,但在IDE之外运行发布版本吗?我肯定是在命令行上从bin/Debug运行它的。此外,我还做了一个重新git克隆了我的repo,并在不打开IDE的情况下从命令行构建了Debug和Release,这两个二进制文件都崩溃了。我不确信它没有在调试器中发生,只是因为某种原因我没有看到它。我更改了main方法以添加try/catch,但它仍然没有被捕获。我在那里放了一个log语句,所以我100%确定我的添加没有被代码生成器破坏。不过谢谢,你的链接提供了信息。在这种情况下,异常几乎肯定是由后台线程引发的。你有穿线吗?没有。我的意思是,我在做WPF,所以有一定数量的UI线程是隐式发生的,但是
我还没有做任何花哨的事情。看起来很可疑,特别是考虑到错误没有发生在调试器中。我不是想猜测你,但是你确定你在调试器中运行的二进制文件与在调试器中运行的二进制文件相同吗?尝试执行Build->Clean,然后从IDE外部运行它。如果它仍然有效,那么您就不是在同一个地方跑步。另外,请检查您的构建配置-您可能正在调试调试版本,但在IDE之外运行发布版本吗?我肯定是在命令行上从bin/Debug运行它的。此外,我还做了一个重新git克隆了我的repo,并在不打开IDE的情况下从命令行构建了Debug和Release,这两个二进制文件都崩溃了。我不相信它不会在调试器中发生,只是因为某种原因我没有看到它。这很有趣。我有一个跟踪,但从开始到结束跟踪中的每个步骤都在一个内部MS库或另一个库中。不知道从这里到哪里去。不管怎样,我猜你的答案会被打上绿色的大对勾。谢谢这很有趣。我有一个跟踪,但从开始到结束跟踪中的每个步骤都在一个内部MS库或另一个库中。不知道从这里到哪里去。不管怎样,我猜你的答案会被打上绿色的大对勾。谢谢这是一个伟大的一般提示!这是一个伟大的一般提示!