Wiem, że mogę uniemożliwić debuggerowi Visual Studio zatrzymanie się na określonych rodzajach wyjątków, gdy są one wywoływane (za pośrednictwem okna dialogowego "Wyjątki" Ctrl-Alt-E). Ale co, jeśli chcesz kontrolować to z kodu, dla niektórych konkretnych miejsc, a nie na zasadzie wszystko albo nic? Na przykład:Selektywne zapobieganie zatrzymywaniu się debuggera przy wyjątkach pierwszej szansy
try
{
SomeMethod(token);
}
catch (OperationCancelledException)
{
return false;
}
// ...
void SomeMethod(CancellationToken token)
{
// ...
// I don't want the debugger to stop on the following line
#pragma ignore(OperationCancelledException, true)
token.ThrowIfCancellationRequested();
#pragma ignore(OperationCancelledException, false)
}
używam hipotetycznego #pragma ignore
aby zilustrować, co mam na myśli, ale nie coś takiego rzeczywiście istnieje?
UPDATE w celu odpowiedzi na pytanie "Niejasne, o co pytasz". Wypróbuj ten kod w debugerze: https://dotnetfiddle.net/npMk6r. Upewnij się, że wszystkie wyjątki są włączone w oknie dialogowym Ctrl-Alt-E. Debuger zatrzyma się na linii throw new OperationCanceledException("cancelled1")
po każdej iteracji pętli. Nie chcę, żeby tak się stało, ponieważ jest to denerwujące. Jednak chcę, aby zatrzymał się na ostatnim rzucie poza pętlą, throw new OperationCanceledException("cancelled2")
(lub gdziekolwiek indziej, o to chodzi).
co jeśli po prostu pusty '' {} catch blok Próbował pan, że ..? – MethodMan
@DJKRAZE, Debugger zatrzyma się na 'token.ThrowIfCancellationRequested()' tak czy inaczej, chyba że wyłączę 'OperationCancelledException' (lub' TaskCancelledException') w oknie dialogowym Ctrl-Alt-E. Nie chcę połknąć wyjątku, po prostu chcę, aby debugger zignorował go dla pewnych miejsc w moim kodzie, nie wszędzie. – avo
Czy "DebuggerHiddenAttribute" będzie opłacalną opcją? – InBetween