54

我在调试时收到未处理的异常,程序停止执行。调试器没有向我显示这条线,所以我不知道要修复什么。

System.AggregateException发生了“ ”类型的未处理异常mscorlib.dll

附加信息:通过等待任务或访问其异常属性未观察到任务的异常。结果,未观察到的异常被终结器线程重新抛出。

无法获取本地或参数“ <this>”的值,因为它在此指令指针处不可用,可能是因为它已被优化掉。 System.Threading.Tasks.TaskExceptionHolder

如何解决此问题?

我还发现这个问题非常相似。

4

4 回答 4

64

正如消息所说,您有一个引发未处理异常的任务。

打开 Break on All Exceptions (Debug, Exceptions) 并重新运行程序。
这将向您显示最初抛出的原始异常。


(附加注释):在 VS2015(或更高版本)中。选择“调试”>“选项”>“调试”>“常规”,然后取消选择“仅启用我的代码”选项。

于 2012-06-20T14:46:52.393 回答
11

您可以直接处理异常,这样它就不会使您的程序崩溃(捕获AggregateException)。您还可以查看内部异常,这将为您提供更详细的错误解释:

try {
    // your code 
} catch (AggregateException e) {

}
于 2012-06-20T14:50:24.617 回答
4

如果您可以轻松重现该问题,则接受的答案将起作用。但是,作为最佳实践,您应该捕获在任务中执行的任何异常(和日志记录)。否则,如果任务中发生任何意外情况,您的应用程序将崩溃。

Task.Factory.StartNew(x=>
   throw new Exception("I didn't account for this");
)

但是,如果我们这样做,至少应用程序不会崩溃。

Task.Factory.StartNew(x=>
   try {
      throw new Exception("I didn't account for this");
   }
   catch(Exception ex) {
      //Log ex
   }
)
于 2015-04-21T12:23:47.690 回答
1

就我而言,我在使用 Edge.js 时遇到了这个问题——所有问题都是 C# Edge.js 函数定义中的 JavaScript 语法错误。

于 2017-07-17T15:24:01.293 回答