1

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

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

我很想修复它。 我只是无法获得关于这个混蛋的堆栈跟踪。

该例外正在规避以下所有内容:

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

我所要做的只是 Windows 发送给 MS 的错误报告的神秘内容。这些十六进制的内存转储并没有那么有用。

有谁知道我怎么能得到那个该死的痕迹?

4

3 回答 3

5

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

  1. 转到 WPF 应用程序的项目属性。
  2. 选择第一个(侧面)选项卡,Application
  3. Output type选择下Console Application
  4. 构建并运行您的应用程序。它应该以一个额外的控制台窗口启动。当它崩溃时,您应该会在其中看到异常和堆栈跟踪。
于 2011-10-18T21:06:51.510 回答
2

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

调试诊断:http : //www.microsoft.com/download/en/details.aspx? displaylang=en&id=24370

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

于 2011-10-18T20:03:10.480 回答
1

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

于 2011-10-18T19:47:05.033 回答