【发布时间】:2014-10-07 08:11:32
【问题描述】:
假设我有以下代码:
async void buttonClick(object sender, RoutedEventArgs e)
{
await nested1();
}
async Task nested1()
{
await nested2();
}
async Task nested2()
{
await nested3();
}
async Task nested3()
{
await Task.Delay(1000);
throw new Exception("Die"); // <-- I want Visual Studio to break on this line
}
只有在异常未处理时,我才能使 Visual Studio 在指示的行上中断?
通常当抛出异常时,Visual Studio 会在 App.g.i.cs 中中断:
如果我随后在调试器选项中启用“仅我的代码”,它将改为在此处中断:
越来越近了。如果我随后在“异常”窗口 (Ctrl+Alt+E) 中的“Thrown”列下检查System.Exception,它将完全在我想要的位置中断:
但现在 Visual Studio 将中断所有抛出的异常,而不仅仅是未处理的异常。有没有办法让 Visual Studio 只针对未处理的异常在最合乎逻辑的代码行中中断,就像在常规的非异步代码中一样?如果这种行为是不可能的,那么:
- 为什么不可能?
- 如何识别引发异常的代码行,无论是我自己的代码的
throw语句,还是引发异常的框架方法调用?李>
我在此示例中使用了 3 个嵌套函数来强调我的代码可能很复杂,包含许多分支和嵌套方法调用,如果 Visual Studio 没有在最内层的行中断,则很难识别有问题的代码行代码。
【问题讨论】:
标签: c# visual-studio windows-store-apps async-await windows-phone-8.1