【问题标题】:JIT debugger always shows up when my app crash instead of my crash report当我的应用程序崩溃而不是我的崩溃报告时,JIT 调试器总是出现
【发布时间】:2012-07-19 00:25:03
【问题描述】:

我尝试过使用Exception Reporter 以及https://stackoverflow.com/a/338030/342740 等其他方法,但无论我使用什么,总是显示windows 崩溃错误/JIT,而不是我自己的崩溃报告。

一个简单的例子是使用 nCalc 从 try and catch 块中计算失败的表达式。

string formula = "10,1 * 231,2";
Expression exp = new Expression(formula);
exp.Evaluate();

基本上我不知道它失败的原因以及我能做些什么来解决它。

我正在使用的测试 VM 是安装了 .Net4 的 Windows XP SP3,没有 Visual Studio 或其他任何东西都是干净的 WINXPSP3 安装。

示例图片:

【问题讨论】:

  • 感谢您的否决票,这解释了很多,如果我的帖子中缺少某些内容,如果您能在投反对票之前指出这一点会更有用。此外,我确实环顾四周,但没有使用我用来搜索的术语找到与此问题相关的信息。
  • 我支持你。您在问题中提供了相当多的信息 - 忽略不加解释地对您投反对票的李子。
  • @JamieKeeling 赞赏赞成票,我真的不介意反对票,但是当没有 cmets 时,有时很难知道人们想要你什么,而我想提供它,我当我相信我有足够的帖子来描述这个场景时,我自己也猜不出来。
  • 因此,问题可能出在 .NET 之外,否则其他两种方法会为您提供一些信息。堆栈在调试器中崩溃时是什么样的?
  • @PeterRitchie 就像我上面提到的那样,我用 nCalc 犯了一个非常简单的错误,以评估无效的表达式,例如“10,1 * 10,2”,评估不喜欢逗号并且会失败。在我安装了 VS 的计算机上使用 Exception Reporter 它会显示出来,但是在我编译并将其发送到 VM 后,它将与 windows 默认崩溃错误窗口重叠,我将使用我正在使用的评估函数更新我的帖子产生错误。

标签: c# .net-4.0 exception-handling crash-reports


【解决方案1】:

正如 cmets 中所说,您所看到的与 JIT 无关。它是 Windows 窗体默认的 ThreadException 处理程序(它不会出现在 WPF 应用程序中)。默认情况下,此对话框仅在您未附加到调试器时才会出现。

在您的 Main 方法中,添加以下行:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

这将强制异常通过ThreadException 处理程序,允许您处理它们并显示您自己的异常对话框。更多信息on MSDN

【讨论】:

  • 感谢您的回复,我会尝试并报告。
  • @Julien,我很确定它应该是UnhandledExceptionMode.CatchException,以便使用用户代码处理异常。 @Guapo,我还会添加一个 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 处理程序,以防在非 UI 线程上引发异常。
  • @JulienLebosquain 好吧,我不确定非 UI,但它似乎现在几乎可以捕获所有内容,到目前为止没有任何问题。我会尝试你提到的,看看它是否会发生,如果你说的也能纠正它,谢谢。
  • Ops,意思是在上面说@Nick 我的坏话。
  • @Guapo:查看上面链接的 MSDN 文档。它很好地解释了这两个未处理的异常事件之间的区别。
猜你喜欢
  • 2021-11-19
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多