Dec*_*oon 6 c# visual-studio async-await windows-store-apps windows-phone-8.1
说我有以下代码:
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
}
Run Code Online (Sandbox Code Playgroud)
只有在未处理异常时,如何才能使Visual Studio在指定的行中断?
通常,当抛出异常时,Visual Studio将在App.gics中断:
如果我然后在调试器选项中启用"只是我的代码",它将在此处中断:
越来越接近.如果我然后System.Exception
在"例外"窗口(Ctrl + Alt + E)中的"Thrown"列下进行检查,它将完全打破我想要的位置:
但现在Visual Studio将打破所有抛出的异常,而不仅仅是未处理的异常.有没有办法让Visual Studio只针对未处理的异常打破最合乎逻辑的代码行,就像在常规的非异步代码中一样?如果无法执行此操作,则:
throw
语句,还是引发异常的框架方法调用?我在这个例子中使用了3个嵌套函数来强调我的代码可能很复杂,有很多分支和嵌套方法调用,如果Visual Studio没有破坏最内层的代码行,那么识别有问题的代码行是很困难的.
我想我可能已经找到了我的问题的答案.
首先,我System.Exception
在例外窗口(Ctrl + Alt + E)的"Thrown"列下取消选中.我这样做是因为我不希望Visual Studio在所有异常中断,只有未处理的异常.
其次,我在调试器选项中启用了"Just my code".
现在,当调试器中断时,它将在此处中断:
根据我的问题中的截图.但是,如果我检查调用堆栈:
我实际上可以看到异常的起源(nested3()
第46行).如果我在调用堆栈窗口中单击此条目,Visual Studio将跳转到正确的行,"Locals"窗口甚至会显示该框架中局部变量的值.凉!我想这就是我想要的.
归档时间: |
|
查看次数: |
1347 次 |
最近记录: |