C#/ WPF app抛出一个ObjectDisposedException;为什么我无法捕获或获得堆栈跟踪?

时间:2011-10-18 19:26:05

标签: c# wpf stack-trace objectdisposedexception

我有一个C#WPF UI应用程序,当我关闭它时,我总是得到一个Windows应用程序崩溃对话框(“UIDemo遇到了问题,需要关闭。”)。

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

我很想解决它。 我无法在混蛋中获得堆栈跟踪。

该例外正在逃避以下所有因素:

  • 我的DispatcherUnhandledException处理程序
  • my try / catch包含Exit事件处理程序的全部内容
  • 在该应用程序崩溃对话框中单击“调试”将关闭它并且不执行任何操作
  • 在VisualStudio的调试模式下运行应用程序似乎会起作用,但奇怪的是,它似乎没有这种方式崩溃,所以没有跟踪

所有我必须继续的是Windows发送给MS的错误报告的神秘内容。这些十六进制的内存转储并不是那么有用。

有谁知道我怎么能得到这种痕迹?

3 个答案:

答案 0 :(得分:5)

控制台窗口将显示带有完整堆栈跟踪的任何异常。要向WPF应用程序添加控制台窗口:

  1. 转到WPF应用程序的项目属性。
  2. 选择第一个(侧面)标签Application
  3. Output type下选择Console Application
  4. 构建并运行您的应用。它应该启动一个额外的控制台窗口。当它崩溃时,你应该看到异常和堆栈跟踪。

答案 1 :(得分:2)

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

DebugDiag:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24370

使用WinDbg调试CLR:http://www.codeproject.com/KB/debug/windbg_part1.aspx

答案 2 :(得分:1)

尝试在主方法中放置try / catch,而不是在退出处理程序周围。在WPF中,主要方法并不总是很容易找到 - 请看这里如何找到它:http://joyfulwpf.blogspot.com/2009/05/where-is-main-method-in-my-wpf.html