【发布时间】:2012-01-26 10:15:16
【问题描述】:
Visual Studio 有一个特性可以让调试未处理的异常变得更加容易:它会在有问题的代码行停止并显示异常。
似乎Task 类的设计方式总是抑制此功能:它捕获每个异常,然后在任务被Waited 或完成时重新抛出不同的异常。
我知道我可以让它在第一次出现异常时停止,但这并不总是有帮助:假设许多相同类型的已处理异常发生在未处理异常之前。在这种情况下,除了实际导致问题的异常之外,VS 将在每个非问题异常上停止。
另一种选择更不可接受:只查看InnerException 的堆栈跟踪:这意味着虽然我知道哪一行导致了异常,但我无法访问它的任何本地状态,如果程序是实际上停在那里。
我能否以某种方式获得两全其美,使用Task 类,但不必忍受降级的异常调试功能集?
额外问题:这是否意味着 await 块内的空引用异常不会导致 Visual Studio 直接停在那里,而是完全停在其他地方?
【问题讨论】:
-
私有 Task.Execute() 方法包含 catch Everything 语句。之后的 HandleException 和 AddException。一切都是私有的和非虚拟的。
-
@HansPassant 如果您希望将其发布为答案(暗示这基本上是不可能的),我最终会在没有更好答案的情况下接受它。
标签: visual-studio-2010 debugging